Process Hacker
emenu.h
Go to the documentation of this file.
1 #ifndef _PH_EMENU_H
2 #define _PH_EMENU_H
3 
4 #define PH_EMENU_DISABLED 0x1
5 #define PH_EMENU_CHECKED 0x2
6 #define PH_EMENU_HIGHLIGHT 0x4
7 #define PH_EMENU_MENUBARBREAK 0x8
8 #define PH_EMENU_MENUBREAK 0x10
9 #define PH_EMENU_DEFAULT 0x20
10 #define PH_EMENU_MOUSESELECT 0x40
11 #define PH_EMENU_RADIOCHECK 0x80
12 
13 #define PH_EMENU_SEPARATECHECKSPACE 0x100000
14 #define PH_EMENU_SEPARATOR 0x200000
15 
16 #define PH_EMENU_TEXT_OWNED 0x80000000
17 #define PH_EMENU_BITMAP_OWNED 0x40000000
18 
19 struct _PH_EMENU_ITEM;
20 
21 typedef VOID (NTAPI *PPH_EMENU_ITEM_DELETE_FUNCTION)(
22  _In_ struct _PH_EMENU_ITEM *Item
23  );
24 
25 typedef struct _PH_EMENU_ITEM
26 {
27  ULONG Flags;
28  ULONG Id;
29  PWSTR Text;
30  HBITMAP Bitmap;
31 
32  PVOID Parameter;
33  PVOID Context;
34  PPH_EMENU_ITEM_DELETE_FUNCTION DeleteFunction;
35  PVOID Reserved;
36 
40 
42 
44 PPH_EMENU_ITEM PhCreateEMenuItem(
45  _In_ ULONG Flags,
46  _In_ ULONG Id,
47  _In_ PWSTR Text,
48  _In_opt_ HBITMAP Bitmap,
49  _In_opt_ PVOID Context
50  );
51 
54  _In_ PPH_EMENU_ITEM Item
55  );
56 
57 #define PH_EMENU_FIND_DESCEND 0x1
58 #define PH_EMENU_FIND_STARTSWITH 0x2
59 #define PH_EMENU_FIND_LITERAL 0x4
60 
62 PPH_EMENU_ITEM PhFindEMenuItem(
63  _In_ PPH_EMENU_ITEM Item,
64  _In_ ULONG Flags,
65  _In_opt_ PWSTR Text,
66  _In_opt_ ULONG Id
67  );
68 
69 PPH_EMENU_ITEM PhFindEMenuItemEx(
70  _In_ PPH_EMENU_ITEM Item,
71  _In_ ULONG Flags,
72  _In_opt_ PWSTR Text,
73  _In_opt_ ULONG Id,
74  _Out_opt_ PPH_EMENU_ITEM *FoundParent,
75  _Out_opt_ PULONG FoundIndex
76  );
77 
79 ULONG PhIndexOfEMenuItem(
80  _In_ PPH_EMENU_ITEM Parent,
81  _In_ PPH_EMENU_ITEM Item
82  );
83 
86  _Inout_ PPH_EMENU_ITEM Parent,
87  _Inout_ PPH_EMENU_ITEM Item,
88  _In_ ULONG Index
89  );
90 
92 BOOLEAN PhRemoveEMenuItem(
93  _Inout_opt_ PPH_EMENU_ITEM Parent,
94  _In_opt_ PPH_EMENU_ITEM Item,
95  _In_opt_ ULONG Index
96  );
97 
100  _Inout_ PPH_EMENU_ITEM Parent
101  );
102 
103 PHLIBAPI
104 PPH_EMENU PhCreateEMenu(
105  VOID
106  );
107 
108 PHLIBAPI
110  _In_ PPH_EMENU Menu
111  );
112 
113 #define PH_EMENU_CONVERT_ID 0x1
114 
115 typedef struct _PH_EMENU_DATA
116 {
119 
121  _Out_ PPH_EMENU_DATA Data
122  );
123 
125  _Inout_ PPH_EMENU_DATA Data
126  );
127 
128 HMENU PhEMenuToHMenu(
129  _In_ PPH_EMENU_ITEM Menu,
130  _In_ ULONG Flags,
131  _Inout_opt_ PPH_EMENU_DATA Data
132  );
133 
135  _In_ HMENU MenuHandle,
136  _In_ PPH_EMENU_ITEM Menu,
137  _In_ ULONG Flags,
138  _Inout_opt_ PPH_EMENU_DATA Data
139  );
140 
142  _Inout_ PPH_EMENU_ITEM MenuItem,
143  _In_ HMENU MenuHandle
144  );
145 
146 PHLIBAPI
148  _Inout_ PPH_EMENU_ITEM MenuItem,
149  _In_ HINSTANCE InstanceHandle,
150  _In_ PWSTR Resource,
151  _In_ ULONG SubMenuIndex
152  );
153 
154 #define PH_EMENU_SHOW_SEND_COMMAND 0x1
155 #define PH_EMENU_SHOW_LEFTRIGHT 0x2
156 
157 PHLIBAPI
158 PPH_EMENU_ITEM PhShowEMenu(
159  _In_ PPH_EMENU Menu,
160  _In_ HWND WindowHandle,
161  _In_ ULONG Flags,
162  _In_ ULONG Align,
163  _In_ ULONG X,
164  _In_ ULONG Y
165  );
166 
167 // Convenience functions
168 
169 PHLIBAPI
170 BOOLEAN PhSetFlagsEMenuItem(
171  _Inout_ PPH_EMENU_ITEM Item,
172  _In_ ULONG Id,
173  _In_ ULONG Mask,
174  _In_ ULONG Value
175  );
176 
177 FORCEINLINE BOOLEAN PhEnableEMenuItem(
178  _Inout_ PPH_EMENU_ITEM Item,
179  _In_ ULONG Id,
180  _In_ BOOLEAN Enable
181  )
182 {
183  return PhSetFlagsEMenuItem(Item, Id, PH_EMENU_DISABLED, Enable ? 0 : PH_EMENU_DISABLED);
184 }
185 
186 PHLIBAPI
188  _In_ PPH_EMENU_ITEM Item,
189  _In_ ULONG Mask,
190  _In_ ULONG Value
191  );
192 
193 #define PH_EMENU_MODIFY_TEXT 0x1
194 #define PH_EMENU_MODIFY_BITMAP 0x2
195 
196 PHLIBAPI
198  _Inout_ PPH_EMENU_ITEM Item,
199  _In_ ULONG ModifyFlags,
200  _In_ ULONG OwnedFlags,
201  _In_opt_ PWSTR Text,
202  _In_opt_ HBITMAP Bitmap
203  );
204 
205 #endif