keybd_event
Как можно определить была ли использована функция keybd_event или все же клавиша была нажата физически?
перехват клавиатуры:
И внутри обработчика проверять через флаг LLKHF_INJECTED структуры KBDLLHOOKSTRUCT:
Такой перехват позволяет отказаться от keybd_event вовсе.
Сам вызов keybd_event не предоставляет такой возможности. Можно установить низкоуровневый
Код:
HHOOK m_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, GetModuleHandle(0), NULL);
И внутри обработчика проверять через флаг LLKHF_INJECTED структуры KBDLLHOOKSTRUCT:
Код:
LRESULT CALLBACK KeyboardProc(int32 code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT& ll = *(KBDLLHOOKSTRUCT*)lParam;
if (ll.flags & LLKHF_INJECTED) return 1; //нажатие клавиши было программно внедрено
return CallNextHookEx(m_hHook, code, wParam, lParam );
}
{
KBDLLHOOKSTRUCT& ll = *(KBDLLHOOKSTRUCT*)lParam;
if (ll.flags & LLKHF_INJECTED) return 1; //нажатие клавиши было программно внедрено
return CallNextHookEx(m_hHook, code, wParam, lParam );
}
Такой перехват позволяет отказаться от keybd_event вовсе.