горячая клавиша ctrl для моего приложения

У меня есть приложение winforms .net C#, и мне нужно добавить поддержку горячих клавиш, но я хочу больше, чем стандартная функция RegisterHotKey, я хочу иметь возможность поддерживать горячие клавиши, такие как ctrl-ctrl (как в Google Desktop).

Пожалуйста, дайте мне направление, как это реализовать.

редактировать:

Вы не поняли это правильно. Я хочу, чтобы горячая клавиша работала, даже если мое приложение не сфокусировано, например, свернуто в трей.


person DxCK    schedule 24.09.2010    source источник


Ответы (3)


Вы можете получить отдельные клавиши (например, клавишу Ctrl), опросив Console.KeyAvailable, а затем прочитав с помощью Console.ReadKey, но это не скажет вам, когда они отпустят клавишу. Вероятно, вам придется перехватывать сообщение WM_KEYDOWN и вызывать GetAsyncKeyState для каждой клавиши, чтобы вы могли определить, какая из специальных клавиш (control, shift, alt и т. д.) в данный момент нажата.

По крайней мере, это то, что я помню, когда писал игры.

person Jim Mischel    schedule 24.09.2010

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

person MikeG    schedule 24.09.2010

Возможно, вам придется установить перехватчик клавиатуры. Теперь, когда .NET 4.0 поддерживает загрузку нескольких версий CLR в один процесс, это уже не так плохо, как раньше, но по-прежнему осуждается.

person Ben Voigt    schedule 25.09.2010
comment
Клавиатурный хук отличный, пока дело не доходит до антивирусов и продуктов безопасности, которые детектируют мою программу как кейлоггер :-( - person DxCK; 23.10.2010