我正在我的應用程序中安裝一個鉤子以獲得標準的EDIT上下文菜單(撤銷/複製/編輯/粘貼/等)。我需要爲我的應用程序插入一個新的菜單項。從HWND中獲取HMENU Hook
我設置了一個窗口鉤子,但我似乎無法獲取上下文菜單的HMENU。這是我設置了鉤:
g_hHook = SetWindowsHookEx(WH_CALLWNDPROC, HookCallWndProc, NULL, GetCurrentThreadId());
這裏是我的回調函數:
LRESULT CALLBACK HookCallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
LPCWPSTRUCT cwps = (LPCWPSTRUCT)lParam;
switch(cwps->message)
{
case WM_CREATE:
{
WCHAR szClass[128];
GetClassName(cwps->hwnd, szClass, 127);
if (wcscmp(szClass, L"#32768") == 0)
{
LPCREATESTRUCT lpcs = (LPCREATESTRUCT)cwps->lParam;
HMENU hMenu = GetMenu(cwps->hwnd);
// hMenu is 0x0
//MENUINFO info;
//ZeroMemory(&info, sizeof(MENUINFO));
//info.cbSize = sizeof(info);
//GetMenuInfo(hMenu, &info);
MessageBox(NULL, L"Test", L"Test", NULL);
}
break;
}
}
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
我也嘗試設置與WH_CALLWNDPROCRET掛鉤,但是這一次甚至沒有捕捉的WM_CREATE消息菜單。
有沒有人知道如何獲得這種特殊情況下的HMENU?
感謝, 凱文
GetMenu僅適用於「menubars」AFAIK – Anders 2012-01-09 02:34:58