【发布时间】:2013-09-10 19:10:42
【问题描述】:
我在尝试使用键盘挂钩时遇到问题。我正在尝试做(并且做)的是从任何窗口/焦点,我可以点击一个运行功能的键(移动鼠标并单击。)
从前面看它工作得很好,但是一旦我开始做其他事情,一切都会变得奇怪(即使在关闭问题之后。)
在 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);
}
}
感谢阅读。
【问题讨论】:
标签: c++ winapi keyboard-hook