我在尝试使用键盘挂钩时遇到问题。我正在尝试做(并且做)的是从任何窗口/焦点,我可以点击运行功能的键(移动鼠标并单击。)
它从前面工作得很好,但是一旦我开始做其他事情,一切都会变得奇怪(即使在关闭问题之后。)
在 Firefox 上,它将具有“当我单击鼠标时选择并突出显示所有位置”;如果我尝试键入,所有数字字符都会出现,好像 shift 按钮已按下并且无法绕过它。如果我单击任务栏上的编译器 (wxDev C++),它会自动启动程序的一个新实例。
这只是问题的开始,我重新启动计算机以恢复正常行为。
我想我可能用错了:
在 int WinMain 中:
keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hThisInstance, 0);
在主程序中:
case WM_KEY_WPARAM_VK:
keyid = wParam; // 65 == 'a'
letterid = keyid - 65;
if ('a'+letterid == 'q') { DoFunction(); }
return 0;
这样当我在键盘上按 q 时,就会调用该函数。
这是程序,我试图不锁定键盘打字(所以我添加了额外的行。)我无法弄清楚......
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam ) {
KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
// When a key is pressed
if (WM_KEYDOWN == wParam) {
PostMessage(hWnd, WM_KEY_WPARAM_VK, pKeyBoard->vkCode, 0);
CallNextHookEx(keyboardHook, pKeyBoard->vkCode, 0, 0);
}
}
谢谢阅读。