Леонид Asked:2024-06-05 23:22:28 +0000 UTC2024-06-05 23:22:28 +0000 UTC 2024-06-05 23:22:28 +0000 UTC 处理未聚焦的小部件的键盘按键。 Qt 772 即使小部件未处于焦点状态,如何使小部件处理键盘按下操作?有没有办法隐藏小部件,使其不会出现在任务栏中,但处于活动状态并且还可以处理键盘按下?我使用 Windows c++ 1 个回答 Voted Best Answer Леонид 2024-07-04T22:10:12Z2024-07-04T22:10:12Z #include "windows.h" #include <iostream> HHOOK hook; KBDLLHOOKSTRUCT kbStruct; LRESULT CALLBACK HookCallBack(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode >= 0) { kbStruct = *((KBDLLHOOKSTRUCT*)lParam); if (wParam == WM_KEYDOWN) // Клавиша нажата/удерживается { std::cout << "Key press: "; } else if (wParam == WM_KEYUP) // Клавиша отпущена { std::cout << "Key release: "; } std::cout << kbStruct.vkCode << std::endl; // Выводит в консоль номер нажатой клавиши } return CallNextHookEx(hook, nCode, wParam, lParam); } int main() { if (!(hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookCallBack, NULL, 0))) { std::cout << "Hook не установлен"; } MSG ms; while (true) { GetMessage(&ms, NULL, 0, 0); } return 0; } HookCallBack每当我们用键盘执行某些操作(按下/释放/按住某个键)时,就会触发该函数。为了防止程序立即结束,需要无限循环。GetMessage我不知道它的作用,但如果没有它,它就不会在控制台中显示密钥号码。
HookCallBack每当我们用键盘执行某些操作(按下/释放/按住某个键)时,就会触发该函数。为了防止程序立即结束,需要无限循环。GetMessage我不知道它的作用,但如果没有它,它就不会在控制台中显示密钥号码。