У меня возникла проблема при попытке использовать клавиатуру. То, что я пытаюсь сделать (и делает) из любого окна / фокуса, я могу нажать клавишу, которая запускает функцию (которая перемещает мышь и щелкает).
С фронта все работает нормально, но как только я начинаю что-то делать, все становится странно (даже после закрытия проблемы).
В 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);
}
}
Спасибо за прочтение.
Вам нужно поставить CallNextHookEx
функционировать вне if
заявление! (а также обновить его, чтобы правильно пройти wParam
а также lParam
до следующего крючка)
return CallNextHookEx(keyboardHook, pKeyBoard->vkCode, wParam, lParam);
Как у вас сейчас, ваш код будет блокировать все нажатия клавиш в остальной части ОС, отсюда и странное поведение.
Это абсолютно необходимо, чтобы CallNextHookEx
вызывается независимо от того, что вы делаете в ловушке. Я также избегал бы выполнения каких-либо длительных (блокирующих) операций, когда вы внутри вашего хука.
Других решений пока нет …