220 lines
4.0 KiB
C
220 lines
4.0 KiB
C
#ifndef _PH_EMENU_H
|
|
#define _PH_EMENU_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define PH_EMENU_DISABLED 0x1
|
|
#define PH_EMENU_CHECKED 0x2
|
|
#define PH_EMENU_HIGHLIGHT 0x4
|
|
#define PH_EMENU_MENUBARBREAK 0x8
|
|
#define PH_EMENU_MENUBREAK 0x10
|
|
#define PH_EMENU_DEFAULT 0x20
|
|
#define PH_EMENU_MOUSESELECT 0x40
|
|
#define PH_EMENU_RADIOCHECK 0x80
|
|
|
|
#define PH_EMENU_SEPARATECHECKSPACE 0x100000
|
|
#define PH_EMENU_SEPARATOR 0x200000
|
|
|
|
#define PH_EMENU_TEXT_OWNED 0x80000000
|
|
#define PH_EMENU_BITMAP_OWNED 0x40000000
|
|
|
|
struct _PH_EMENU_ITEM;
|
|
|
|
typedef VOID (NTAPI *PPH_EMENU_ITEM_DELETE_FUNCTION)(
|
|
_In_ struct _PH_EMENU_ITEM *Item
|
|
);
|
|
|
|
typedef struct _PH_EMENU_ITEM
|
|
{
|
|
ULONG Flags;
|
|
ULONG Id;
|
|
PWSTR Text;
|
|
HBITMAP Bitmap;
|
|
|
|
PVOID Parameter;
|
|
PVOID Context;
|
|
PPH_EMENU_ITEM_DELETE_FUNCTION DeleteFunction;
|
|
PVOID Reserved;
|
|
|
|
struct _PH_EMENU_ITEM *Parent;
|
|
PPH_LIST Items;
|
|
} PH_EMENU_ITEM, *PPH_EMENU_ITEM;
|
|
|
|
typedef struct _PH_EMENU_ITEM PH_EMENU, *PPH_EMENU;
|
|
|
|
PHLIBAPI
|
|
PPH_EMENU_ITEM PhCreateEMenuItem(
|
|
_In_ ULONG Flags,
|
|
_In_ ULONG Id,
|
|
_In_ PWSTR Text,
|
|
_In_opt_ HBITMAP Bitmap,
|
|
_In_opt_ PVOID Context
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID PhDestroyEMenuItem(
|
|
_In_ PPH_EMENU_ITEM Item
|
|
);
|
|
|
|
#define PH_EMENU_FIND_DESCEND 0x1
|
|
#define PH_EMENU_FIND_STARTSWITH 0x2
|
|
#define PH_EMENU_FIND_LITERAL 0x4
|
|
|
|
PHLIBAPI
|
|
PPH_EMENU_ITEM PhFindEMenuItem(
|
|
_In_ PPH_EMENU_ITEM Item,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PWSTR Text,
|
|
_In_opt_ ULONG Id
|
|
);
|
|
|
|
PHLIBAPI
|
|
PPH_EMENU_ITEM PhFindEMenuItemEx(
|
|
_In_ PPH_EMENU_ITEM Item,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PWSTR Text,
|
|
_In_opt_ ULONG Id,
|
|
_Out_opt_ PPH_EMENU_ITEM *FoundParent,
|
|
_Out_opt_ PULONG FoundIndex
|
|
);
|
|
|
|
PHLIBAPI
|
|
ULONG PhIndexOfEMenuItem(
|
|
_In_ PPH_EMENU_ITEM Parent,
|
|
_In_ PPH_EMENU_ITEM Item
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID PhInsertEMenuItem(
|
|
_Inout_ PPH_EMENU_ITEM Parent,
|
|
_Inout_ PPH_EMENU_ITEM Item,
|
|
_In_ ULONG Index
|
|
);
|
|
|
|
PHLIBAPI
|
|
BOOLEAN PhRemoveEMenuItem(
|
|
_Inout_opt_ PPH_EMENU_ITEM Parent,
|
|
_In_opt_ PPH_EMENU_ITEM Item,
|
|
_In_opt_ ULONG Index
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID PhRemoveAllEMenuItems(
|
|
_Inout_ PPH_EMENU_ITEM Parent
|
|
);
|
|
|
|
PHLIBAPI
|
|
PPH_EMENU PhCreateEMenu(
|
|
VOID
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID PhDestroyEMenu(
|
|
_In_ PPH_EMENU Menu
|
|
);
|
|
|
|
#define PH_EMENU_CONVERT_ID 0x1
|
|
|
|
typedef struct _PH_EMENU_DATA
|
|
{
|
|
PPH_LIST IdToItem;
|
|
} PH_EMENU_DATA, *PPH_EMENU_DATA;
|
|
|
|
PHLIBAPI
|
|
VOID PhInitializeEMenuData(
|
|
_Out_ PPH_EMENU_DATA Data
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID PhDeleteEMenuData(
|
|
_Inout_ PPH_EMENU_DATA Data
|
|
);
|
|
|
|
PHLIBAPI
|
|
HMENU PhEMenuToHMenu(
|
|
_In_ PPH_EMENU_ITEM Menu,
|
|
_In_ ULONG Flags,
|
|
_Inout_opt_ PPH_EMENU_DATA Data
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID PhEMenuToHMenu2(
|
|
_In_ HMENU MenuHandle,
|
|
_In_ PPH_EMENU_ITEM Menu,
|
|
_In_ ULONG Flags,
|
|
_Inout_opt_ PPH_EMENU_DATA Data
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID PhHMenuToEMenuItem(
|
|
_Inout_ PPH_EMENU_ITEM MenuItem,
|
|
_In_ HMENU MenuHandle
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID PhLoadResourceEMenuItem(
|
|
_Inout_ PPH_EMENU_ITEM MenuItem,
|
|
_In_ HINSTANCE InstanceHandle,
|
|
_In_ PWSTR Resource,
|
|
_In_ ULONG SubMenuIndex
|
|
);
|
|
|
|
#define PH_EMENU_SHOW_SEND_COMMAND 0x1
|
|
#define PH_EMENU_SHOW_LEFTRIGHT 0x2
|
|
|
|
PHLIBAPI
|
|
PPH_EMENU_ITEM PhShowEMenu(
|
|
_In_ PPH_EMENU Menu,
|
|
_In_ HWND WindowHandle,
|
|
_In_ ULONG Flags,
|
|
_In_ ULONG Align,
|
|
_In_ ULONG X,
|
|
_In_ ULONG Y
|
|
);
|
|
|
|
// Convenience functions
|
|
|
|
PHLIBAPI
|
|
BOOLEAN PhSetFlagsEMenuItem(
|
|
_Inout_ PPH_EMENU_ITEM Item,
|
|
_In_ ULONG Id,
|
|
_In_ ULONG Mask,
|
|
_In_ ULONG Value
|
|
);
|
|
|
|
FORCEINLINE BOOLEAN PhEnableEMenuItem(
|
|
_Inout_ PPH_EMENU_ITEM Item,
|
|
_In_ ULONG Id,
|
|
_In_ BOOLEAN Enable
|
|
)
|
|
{
|
|
return PhSetFlagsEMenuItem(Item, Id, PH_EMENU_DISABLED, Enable ? 0 : PH_EMENU_DISABLED);
|
|
}
|
|
|
|
PHLIBAPI
|
|
VOID PhSetFlagsAllEMenuItems(
|
|
_In_ PPH_EMENU_ITEM Item,
|
|
_In_ ULONG Mask,
|
|
_In_ ULONG Value
|
|
);
|
|
|
|
#define PH_EMENU_MODIFY_TEXT 0x1
|
|
#define PH_EMENU_MODIFY_BITMAP 0x2
|
|
|
|
PHLIBAPI
|
|
VOID PhModifyEMenuItem(
|
|
_Inout_ PPH_EMENU_ITEM Item,
|
|
_In_ ULONG ModifyFlags,
|
|
_In_ ULONG OwnedFlags,
|
|
_In_opt_ PWSTR Text,
|
|
_In_opt_ HBITMAP Bitmap
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|