2025-05-13 19:45:22 +03:00

91 lines
1.9 KiB
C

#ifndef WNDTREE_H
#define WNDTREE_H
#define WEWNTLC_CLASS 0
#define WEWNTLC_HANDLE 1
#define WEWNTLC_TEXT 2
#define WEWNTLC_THREAD 3
#define WEWNTLC_MAXIMUM 4
typedef struct _WE_WINDOW_NODE
{
PH_TREENEW_NODE Node;
struct _WE_WINDOW_NODE *Parent;
PPH_LIST Children;
union
{
ULONG Flags;
struct
{
ULONG HasChildren : 1;
ULONG Opened : 1;
ULONG WindowVisible : 1;
ULONG Spare : 29;
};
};
PH_STRINGREF TextCache[WEWNTLC_MAXIMUM];
HWND WindowHandle;
WCHAR WindowClass[64];
PPH_STRING WindowText;
CLIENT_ID ClientId;
WCHAR WindowHandleString[PH_PTR_STR_LEN_1];
PPH_STRING ThreadString;
} WE_WINDOW_NODE, *PWE_WINDOW_NODE;
typedef struct _WE_WINDOW_TREE_CONTEXT
{
HWND ParentWindowHandle;
HWND TreeNewHandle;
ULONG TreeNewSortColumn;
PH_SORT_ORDER TreeNewSortOrder;
PPH_HASHTABLE NodeHashtable;
PPH_LIST NodeList;
PPH_LIST NodeRootList;
} WE_WINDOW_TREE_CONTEXT, *PWE_WINDOW_TREE_CONTEXT;
VOID WeInitializeWindowTree(
_In_ HWND ParentWindowHandle,
_In_ HWND TreeNewHandle,
_Out_ PWE_WINDOW_TREE_CONTEXT Context
);
VOID WeDeleteWindowTree(
_In_ PWE_WINDOW_TREE_CONTEXT Context
);
PWE_WINDOW_NODE WeAddWindowNode(
_Inout_ PWE_WINDOW_TREE_CONTEXT Context
);
PWE_WINDOW_NODE WeFindWindowNode(
_In_ PWE_WINDOW_TREE_CONTEXT Context,
_In_ HWND WindowHandle
);
VOID WeRemoveWindowNode(
_In_ PWE_WINDOW_TREE_CONTEXT Context,
_In_ PWE_WINDOW_NODE WindowNode
);
VOID WeClearWindowTree(
_In_ PWE_WINDOW_TREE_CONTEXT Context
);
PWE_WINDOW_NODE WeGetSelectedWindowNode(
_In_ PWE_WINDOW_TREE_CONTEXT Context
);
VOID WeGetSelectedWindowNodes(
_In_ PWE_WINDOW_TREE_CONTEXT Context,
_Out_ PWE_WINDOW_NODE **Windows,
_Out_ PULONG NumberOfWindows
);
#endif