Я хочу создать хорошую библиотеку для перехвата клавиатуры. Я использую метод SetWindowsHookEx и заметил, что метод hookProc, который должен вызываться при любом системном событии KeyDown, не выполняется, если основной поток моего приложения занят. Думаю, крючок нужно сделать так, чтобы за него отвечала другая нить. Это возможно? Как мне это сделать?
Клавиатура низкого уровня Hook не в потоке пользовательского интерфейса
Ответы (1)
Страница справки Microsoft LowLevelKeyboardProc а> упоминает, что
По истечении времени ожидания процедуры перехватчика система передает сообщение следующему перехватчику. Однако в Windows 7 и более поздних версиях перехватчик автоматически удаляется без вызова. Приложение не может узнать, удален ли хук.
Я подозреваю, что это то, что происходит с вами. Ваша функция HookProc должна быть чрезвычайно быстрой: то, что делает моя, — это просто отправка ключевого события в std::vector. Настоящий код выполняется в другом потоке.
person
qdii
schedule
01.06.2012