相关疑难解决方法(0)

为什么必须将SetWindowsHookEx与Windows消息队列一起使用

我一直在尝试使用钩子的东西,我不明白为什么钩子必须与消息队列一起使用

hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
        TranslateMessage(&msg);
        DispatchMessage(&msg);
}
UnhookWindowsHookEx(hook);
Run Code Online (Sandbox Code Playgroud)

为什么这样的东西不起作用?

hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, 0);
cin >> aKey;
UnhookWindowsHookEx(hook);
Run Code Online (Sandbox Code Playgroud)

使用增强螺纹和屏障也不起作用.为什么不能以另一种方式完成钩子和钩子之间的等待?

编辑:

我在创建这个示例时犯了一个错误,我创建了一个WH_KEYBOARD_LL挂钩,而不是WH_KEYBOARD,(我认为它不会产生很大的影响)

循环永远不会只在GetMessage函数上等待.

循环仅在我发布退出消息时执行,PostThreadMessage(id, WM_QUIT, 2323, NULL);所以我不明白它在等待时做了什么,是否有一些内部处理?

有关:

C++ SetWindowsHookEx WH_KEYBOARD_LL正确设置

如何在Win32控制台窗口上设置CBT挂钩?

c++ hook message-queue

15
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×1

hook ×1

message-queue ×1