Как я могу запретить RegisterHotKey блокировать ключ для других приложений?

Я пишу приложение для Win32, которое должно использовать горячие клавиши, не находясь в фокусе (оно работает в фоновом режиме без рисования окна). Я использую RegisterHotKey для предоставления нескольких ключей, но это блокирует любой другой процесс. Например, я назначаю клавишу «c», и когда я нажимаю ее в блокноте, ничего не происходит.

2

Решение

RegisterHotKey() регистрирует глобальные горячие клавиши. Горячие клавиши обрабатываются до обычной обработки ввода с клавиатуры. Это означает, что если вы успешно зарегистрируете горячую клавишу, нажатие этой клавиши приведет к тому, что вы получите сообщение горячей клавиши, а не приложение с фокусом, получающим нормальное WM_KEYDOWN/WM_CHAR Сообщения. Вы фактически заблокировали другие приложения от просмотра нажатия этой клавиши.

Это по замыслу.

Очевидно, что решение, позволяющее избежать столкновений, описанных вами, не Зарегистрируйте горячую клавишу, которую могут использовать другие приложения. Если вы зарегистрируете C без квалификаторов в качестве горячей клавиши, то никакая другая программа не увидит нажатие клавиши C. Вместо этого вы должны использовать квалификаторы, такие как Ctrl / Shift / Alt, чтобы ваша горячая клавиша не мешала нормальному использованию клавиатуры.

Нет способа зарегистрировать горячую клавишу, которая является глобальной если активна другая программа Если вы хотите достичь ситуации, когда, скажем, ваша горячая клавиша работает, когда рабочий стол активен, но больше ничего нет, вы можете использовать ловушку сообщений, чтобы ввести код в процесс рабочего стола (через SetWindowsHookEx()) и перехватить нажатие клавиш таким образом. Но вы не можете сделать это с RegisterHotKey(),

2

Другие решения

GetAsyncKeyState()

может использоваться для определения, нажимаются ли определенные клавиши, даже когда программа работает в фоновом режиме.

0

По вопросам рекламы [email protected]