2010-01-15 7 views
1

Il existe un petit programme tiers dans la zone de notification de la barre des tâches qui utilise la combinaison de touches Ctrl-F11 pour effectuer une tâche. Le problème est que j'utilise le même raccourci mais le mien est occulté par l'autre. Fondamentalement, je ne peux pas faire mon truc lorsque l'utilisateur appuie sur Ctrl-F11 même si ma fenêtre est celle qui est actuellement active. Je pensais que la fenêtre active aurait la priorité dans l'utilisation des combinaisons de touches, mais apparemment ce n'est pas le cas. Considérant que le programme est écrit en .NET C#, comment puis-je obtenir la priorité du raccourci lorsque mon application est active?Comment puis-je traiter une combinaison de touches tierce lorsque mon application est active?

+0

Comment votre application vérifie-t-elle Ctrl-F11 (affectée comme un raccourci de menu par exemple). Je suppose que l'application de plateau a enregistré Ctrl-F11 comme raccourci clavier WIndows? – Nanook

+0

J'ai un événement KeyDown pour ma fenêtre, donc en fonction de si certaines touches sont pressées, je prends des mesures. – user246392

+0

Comme vous, je m'attendais à ce que la fenêtre ait encore reçu l'événement de presse de touche. – Nanook

Répondre

0

Si vous ne pouvez pas modifier la combinaison de touches de l'application de bac et que vous devez utiliser la même chose dans votre application. Une approche extrême pourrait être d'écrire une DLL Windows Hook en C++ ou Delphi et de filtrer toutes les touches pour Ctrl-F11 et envoyer un message à votre application.

Ce n'est pas une mince affaire, il y a des projets qui accrochent les événements du clavier Windows sur Code Project, etc. Vous pouvez en adapter un. Lorsque vous recevez la touche et que votre fenêtre/formulaire est active, vous pouvez utiliser SendMessage pour envoyer un message à votre fenêtre.

Ce serait un dernier repos. Cela dépend à quel point vous en avez besoin.

+0

Les crochets de clavier sont faciles à faire en C#, voir http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx pour un exemple – stuartd