Обработка нажатий на клавиатуру для виджета, который не в фокусе. Qt
Как сделать так, чтобы виджет обрабатывал нажатия с клавиатуры даже тогда, когда он не находиться в фокусе? И есть ли возможность скрыть виджет, чтобы он не отображался в панели задач, но был активен и также обрабатывал нажатия с клавиатуры? Использую винду
Ответы (1 шт):
Автор решения: Леонид
→ Ссылка
#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
хз что делает, но без него в консоль не выводит номер клавиш.