gpt4 book ai didi

c++ - 使用 SetWindowsHookEx Hook 键盘消息的问题

转载 作者:行者123 更新时间:2023-11-28 08:18:28 27 4
gpt4 key购买 nike

我正在尝试连接键盘消息,但没有成功。

我创建了一个测试控制台 win32 应用程序:

int _tmain(int argc, _TCHAR* argv[])
{
HOOKPROC hHookProc;
HINSTANCE hinstDLL;
HHOOK hHook;

hinstDLL = LoadLibrary(TEXT("pathtodll\\KeyHook.dll"));
hHookProc= (HOOKPROC)GetProcAddress(hinstDLL, "HookProc");

hHook = SetWindowsHookEx(
WH_KEYBOARD,
hHookProc,
hinstDLL,
0);

while (1) {}

return 0;
}

我还创建了一个带有 HookProc 函数的测试 win32 dll:

extern __declspec(dllexport) LRESULT CALLBACK HookProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
// process event
//...
MessageBox( NULL,
TEXT("OK"),
TEXT("OK"),
MB_OK);

return CallNextHookEx(NULL, nCode, wParam, lParam);
}

一切都可以正常编译,但是当我尝试调试时,似乎从未调用过 HookProc。实际上在 Win 7 中,当我按任意键时应用程序挂起,而在 Win Xp 中 HookProc 未被调用。我得到的不是 NULL hinstDLL、hHookProc、hHook。

我错过了什么?

最佳答案

不要在调用 SetWindowsHookEx() 后执行空白 while 循环,而是尝试通过 Peek/GetMessage() 让循环抽取调用线程的消息队列。一些 Hook 在安装它们的线程的上下文中运行,因此操作系统必须能够在需要时切换到该线程。

关于c++ - 使用 SetWindowsHookEx Hook 键盘消息的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6801644/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com