2008-09-17 9 views
24

Можно создать дубликат:
How can I register a global hot key to say CTRL+SHIFT+(LETTER) using WPF and .NET 3.5?Лучший способ справиться с глобальной обработкой горячих клавиш в C#?

Я хотел бы иметь несколько глобальных горячие клавиши в моем новом приложении (для управления приложением из любого места в окнах), и все из указанных источников/решения, которые я нашел в Интернете, похоже, предлагают своеобразное решение для хромания (либо решения только для одного g.hotkey, либо решения, которые во время работы создают раздражающие задержки мыши на экране).

Кто-нибудь знает о ресурсе, который может помочь мне достичь этого, чему я могу научиться? Что-нибудь?

Спасибо! :)

+0

Для решения WPF вы можете посмотреть на мой ответ на: [ введите ссылку здесь] [1] [1]: http://stackoverflow.com/questions/48935/how -can-i-register-a-global-hot-key-to-say-ctrlshiftletter-using-wpf-and-ne/9330358 # 9330358 – 2012-02-17 15:03:27

+0

Это то, что вы хотите? http://stackoverflow.com/questions/48935/c-using-wpf-and-net-35-how-can-i-register-a-global-hot-key-to-say-ctrlshiftlett – Gishu 2008-09-17 08:36:09

ответ

7

http://www.codeproject.com/KB/cs/CSLLKeyboardHook.aspx

Если вы не используете .NET 3.5.

+2

-1 клавиатура крючки не являются хорошим выбором для глобальных горячих клавиш. – CodesInChaos 2012-03-12 15:44:03

+1

Ничто иное не соответствует спецификации: «для управления приложением из любого места в окнах», так что либо предоставляйте лучшую информацию [sic], либо удаляйте свой комментарий, пожалуйста. – arul 2013-06-14 21:58:11

5

Я бы справился с этим, используя P/Invoke, чтобы вызвать RegisterHotKey() для каждой горячей клавиши, а затем использовать NativeForm (при условии, что вы используете WinForms), чтобы получать уведомление о сообщении WM_HOTKEY. Это должно содержать большую часть вашего кода горячих клавиш в одном месте.

39

Самое ценное решение я нашел http://bloggablea.wordpress.com/2007/05/01/global-hotkeys-with-net/

Hotkey hk = new Hotkey(); 

hk.KeyCode = Keys.1; 
hk.Windows = true; 
hk.Pressed += delegate { Console.WriteLine("Windows+1 pressed!"); }; 

hk.Register(myForm); 

Обратите внимание, как вы можете установить различные лямбды для различных горячих клавиш

 Смежные вопросы

  • Нет связанных вопросов^_^