Некоторые окна в Windows 8 препятствуют работе моей низкоуровневой клавиатуры
У меня есть приложение, которое использует низкоуровневую клавиатуру для захвата пользовательских сочетаний клавиш на глобальном уровне, чтобы активировать главное окно приложения. Поскольку я хочу разрешить иногда "нечетные" сочетания клавиш, такие как F12 или Ctrl+Ctrl (двойное нажатие), я использую ловушку вместо функции RegisterHotkey API. До Windows 8 эта функция работала отлично. В Windows 8 некоторые окна не позволяют моему приложению получать событие, но только тогда, когда эти окна находятся на переднем плане. Диспетчер задач Windows 8 является одним из таких нарушителей.
Обратите внимание, что, поскольку проблема возникает только тогда, когда окно-нарушитель находится на переднем плане, я знаю, что мой хук все еще зарегистрирован в системе, но временно не достигает моего приложения.
Текущая база кода - C# Framework 4.0; тем не менее, я протестировал предыдущую кодовую базу, которая была неуправляемой C++, и проблема та же.
Версия Windows 8.1 Про с Media Center
Одна вещь, которую я еще не пробовал - это перенести процедуру подключения в отдельную DLL. Я думаю, что прочитал, что процедура подключения к низкоуровневой клавиатуре должна быть в DLL, но я никогда не находил, что это правда. Прежде чем я попробую это сделать, я хотел спросить, не упускаю ли я что-то более простое и более очевидное.
1 ответ
Теперь я понимаю. Хотя мое приложение работает под учетной записью Windows, которая находится в группе "Администраторы", его необходимо запустить с "Запуск от имени администратора", чтобы избежать блокировки UIPI.
Решение, по крайней мере для меня, состоит в том, чтобы попросить конечного пользователя Windows 8 запустить мое приложение от имени администратора, если он / она хочет использовать "причудливые" глобальные сочетания клавиш, подобные тем, которые я упоминал в этом вопросе. (Я также разрешаю пользователю использовать "простые" ярлыки, которые реализованы с помощью RegisterHotkey() вместо WH_KEYBOARD_LL и поэтому не страдают от UIPI.)