перехват нажатий клавиш, даже если форма не имеет фокуса - PullRequest
4 голосов
/ 16 февраля 2009

Я создал приложение winforms, которое проверяет нажатия клавиш CTR + ALT + S и CTRL + ALT + E, используя переопределение метода ProcessCmdKey. Это прекрасно работает, но если экранная заставка включается, а затем выключается, форма не имеет фокуса и нажатия клавиш не перехватываются. Как я могу получить их, даже если у формы нет фокуса?

Ответы [ 3 ]

7 голосов
/ 16 февраля 2009

У Александра Вернера есть проект " System Hotkey Component " в Code Project, который превращает API RegisterHotkey () в пользовательский элемент управления, который действительно прост в реализации.

5 голосов
/ 16 февраля 2009

Мне известны два метода:

  1. RegisterHotKey () - Вы можете использовать функцию RegisterHotKey () для определения общесистемной горячей клавиши. Если пользователь нажимает горячую клавишу, Windows отправляет сообщение WM_HOTKEY.

  2. Win32 Hooks - Это старый API, изначально разработанный для поддержки приложений обучения на базе компьютера (CBT), но я считаю, что Windows все еще поддерживает его. API позволяет перехватывать и, возможно, изменять сообщения, действия мыши и нажатия клавиш для любого окна.

Это Win32 API, а не .NET API, но .NET использует те же базовые компоненты Windows, что методы должны работать с .NET.

0 голосов
/ 09 января 2018

Я знаю, что этот вопрос задавали очень давно, но если кто-нибудь придет сюда, это может быть решением:

Просто установите для свойства KeyPreview (вашей формы) значение True. Таким образом, ваша форма будет обрабатывать событие KeyPress перед любым другим элементом управления, даже если один из них имеет фокус

У меня была довольно похожая проблема. Проверьте здесь: KeyPress на уровне формы с элементами управления

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...