VB.NET Обнаружение нажатия клавиш при минимизации - PullRequest
0 голосов
/ 07 марта 2011

Я хочу иметь возможность определять, когда пользователь нажимает F10 или Ctrl + F10 за пределами моей программы, и после получения нажатия клавиши он отправит текст тому, что в данный момент выбрано (например, текстовое поле). Как это можно сделать самым простым способом?

Ответы [ 3 ]

2 голосов
/ 07 марта 2011

Используйте RegisterHotkey , а не хук клавиатуры для получения глобальной горячей клавиши.

См. Один из моих старых ответов на почти тот же вопрос: прослушайте клавишу, когда приложениене сфокусировано

1 голос
/ 07 марта 2011

Первая проблема заключается в том, что клавиша F10 уже зарезервирована для приложений Windows. Когда пользователь нажимает его, активное приложение выбирает первое меню в своей строке меню. Это предоставляет пользователям удобный способ активировать меню без использования мыши. Ваше предложение взломать эту функциональность на глобальном уровне является невнимательным и неуместным. Я предлагаю выбрать другую комбинацию клавиш, предпочтительно ту, которая не имеет стандартного значения.

Затем вам нужно будет установить низкоуровневый хук клавиатуры (единственный тип хуков, поддерживаемый приложениями .NET). Это единственный способ захвата событий клавиатуры, которые происходят вне вашего приложения. Поскольку вы хотите обнаруживать нажатия клавиш, возникающие, когда ваше приложение находится не на переднем плане, вам понадобится глобальный хук.

Здесь, в блоге Стивена Туба, имеется отличный образец . Это написано на C #, но преобразование в VB.NET тривиально . Если вы предпочитаете полную базу существующего кода, которую вы можете просто добавить в свой проект, вы можете попробовать этот пример , но учтите, что он включает в себя множество дополнительных функций, которые вам не понадобятся.

0 голосов
/ 23 августа 2011

Вы можете проверить это в событии нажатия клавиши:

if not e.control and e.keycode = keys.F10 then
    <Statements>
elseif   e.keycode = keys.F10 then
    <Statements>
end if
...