2008-09-17 16 views
24

Duplicar posible:
How can I register a global hot key to say CTRL+SHIFT+(LETTER) using WPF and .NET 3.5?¿La mejor manera de abordar el procesamiento global de teclas rápidas en C#?

me gustaría tener varias teclas de acceso rápido globales en mi nueva aplicación (para controlar la aplicación desde cualquier lugar de ventanas), y todas las fuentes de dados/Las soluciones que encontré en la web parecen proporcionar una especie de solución de cojera (ya sea soluciones solo para una g.hotkey, o soluciones que mientras se ejecutan crean demoras de mouse molestas en la pantalla).

¿Alguien aquí sabe de un recurso que pueda ayudarme a lograr esto, de lo que pueda aprender? ¿Algo?

Gracias! :)

+0

Para una solución de WPF se puede ver en mi respuesta a: [ enter link description here] [1] [1]: http://stackoverflow.com/questions/48935/how -can-i-register-a-global-hot-key-to-say-ctrlshiftletter-using-wpf-and-ne/9330358 # 9330358 –

+0

¿Es esto lo que quieres? http://stackoverflow.com/questions/48935/c-using-wpf-and-net-35-how-can-i-register-a-global-hot-key-to-say-ctrlshiftlett – Gishu

Respuesta

7

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

Si usted no está utilizando .NET 3.5.

+2

-1 teclado los ganchos no son una buena opción para las teclas rápidas globales. – CodesInChaos

+1

Nada más se ajusta a la especificación: "para controlar la aplicación desde cualquier lugar de Windows", por lo que o bien proporcionar una mejor visión [sic] o eliminar su comentario, por favor. – arul

+0

['RegisterHotKey'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309.aspx) funciona sin importar qué ventana tiene foco, por lo que se ajusta a las especificaciones. – CodesInChaos

5

Lo manejaría usando P/Invoke para llamar a RegisterHotKey() para cada tecla de acceso directo, y luego usar NativeForm (suponiendo que esté usando WinForms) para recibir notificaciones del mensaje WM_HOTKEY. Esto debería mantener la mayor parte de su código de tecla de acceso directo en un solo lugar.

+0

¿Podría hacer un rápido ejemplo de eso? – Svish

+0

¿Está utilizando WinForms o WPF? – Andy

39

La solución más bonito que he encontrado es 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); 

Nota cómo se puede establecer diferentes lambdas a diferentes teclas de acceso rápido

+0

¿Es posible hacer que esta clase funcione con los botones del mouse (Keys.LButton y Keys.RButton)? Intenté usar la misma clase y solo puedo hacer que funcione con las teclas del teclado. –

Cuestiones relacionadas