2009-06-03 10 views
5

Me gustaría que mi aplicación detecte los accesos directos de teclado cuando no esté en ejecución, pero como no parece haber ninguna posibilidad de hacerlo en Windows, una alternativa razonable sería tener un proceso en segundo plano sin una IU que escuche las pulsaciones de teclas. ¿Es posible controlar las pulsaciones de teclas cuando una aplicación no está en primer plano en .Net?¿Cuál es la forma más fácil de agregar atajos de teclado globales en Windows?

Parece que CodeProject article tiene lo que necesito.

Respuesta

4

This library es bastante bueno también

EDIT: recientemente he creado esta biblioteca, que utiliza un enfoque diferente: NHotkey

3

No hay forma de que no sea intrusivo.

Siempre es intrusivo agregar un atajo de teclado global. Si tiene que hacerlo de todos modos, asegúrese de que se trata de una opción de exclusión, no de exclusión.

4

Un acceso directo de Windows puede tener una tecla de acceso directo asociada: haga clic con el botón derecho en cualquier programa en el menú Inicio, vaya a Propiedades y verá un cuadro de "Tecla de acceso directo". Windows buscará esa tecla de acceso rápido en su nombre y ejecutará su programa cuando lo vea. (Lo uso para hacer que Ctrl+Alt+C ejecute la Calculadora.)

Para configurarlo de manera programática, use IShellLink.

+0

¿Cómo puedo crear un enlace cáscara de programación? – Luke

+0

@Luke: http://www.codeproject.com/KB/mcpp/mcppshortcuts.aspx – RichieHindle

4

Al llamar a esta API:

RegisterHotKey

http://msdn.microsoft.com/en-us/library/ms646309.aspx

http://www.pinvoke.net/default.aspx/user32/RegisterHotKey.html

Luego reemplazar este método "WndProc" para monitorear las pulsaciones de teclas.

protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     // let the base class process the message 
     base.WndProc(ref m); 

     // if this is a WM_HOTKEY message, notify the parent object 
     const int WM_HOTKEY = 0x312; 
     if (m.Msg == WM_HOTKEY) ............... 

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc(VS.71).aspx

Cuestiones relacionadas