2009-06-03 7 views
5

Je souhaite que mon application détecte les raccourcis clavier lorsqu'elle ne fonctionne pas, mais comme il ne semble pas possible de le faire sous Windows, une solution de repli raisonnable serait d'avoir un processus d'arrière-plan sans interface utilisateur pour les touches. Est-il possible de surveiller les touches lorsqu'une application n'est pas au premier plan dans .Net?Quel est le moyen le plus simple d'ajouter des raccourcis clavier globaux dans Windows?

Il ressemble à ceci CodeProject article a ce dont j'ai besoin.

Répondre

4

This library est très bon aussi

EDIT: J'ai récemment créé cette bibliothèque, qui utilise une approche différente: NHotkey

3

Il n'y a aucun moyen de le rendre non intrusif.

Il est toujours intrusif d'ajouter un raccourci clavier global. Si vous devez le faire de toute façon, assurez-vous qu'il s'agit d'une option d'opt-in, et non d'opt-out.

4

Un raccourci Windows peut avoir un raccourci associé - cliquez avec le bouton droit sur n'importe quel programme dans votre menu Démarrer, allez dans Propriétés, et vous verrez une boîte de "raccourci". Windows cherchera alors ce raccourci en votre nom et lancera votre programme quand il le verra. (Je l'utilise pour faire Ctrl+Alt+C lancer Calculatrice.)

Pour mettre en place par programme, utilisez IShellLink.

+0

Comment puis-je créer un lien shell programme? – Luke

+0

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

4

En appelant cette API:

RegisterHotKey

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

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

passer outre cette méthode "WndProc" pour surveiller les pressions de touche.

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

Questions connexes