我正在尝试在钩子程序GetMsgProc中打印一条消息,如下面的代码所示:
LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
printf("inside hook proc");
return CallNextHookEx(getmsghook, nCode, wParam, lParam);
}
void main()
{
HINSTANCE hins;
hins = GetModuleHandle(NULL);
getmsghook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC) GetMsgProc, hins, 0);
MSG message;
while (GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
UnhookWindowsHookEx(getmsghook);
}
// --------------------------------------------- --------------
我的猜测是,对于每个键盘或鼠标输入,应该打印该消息。但我无法弄清楚为什么没有发生这种情况。能帮忙吗?
答案 0 :(得分:1)
全局挂钩必须在.DLL中实现,唯一的例外是低kevel键盘和鼠标挂钩。检查SetWindowsHookEx
的返回值,它可能是NULL。