2009-10-09 6 views
3

Lorsque mon application démarre dans la méthode principale static void, je veux déterminer si une touche comme Alt ou Ctrl est enfoncée, puis démarrer l'application dans une sorte d'option- Mode. Comment puis-je savoir si une touche est pressée pendant le démarrage?Obtenir l'état du clavier dans l'application WPF dans la méthode principale au démarrage

J'ai déjà trouvé quelques exemples mais ils importent tous une DLL dll, ce que je ne veux pas faire.

Répondre

7

Utilisez la méthode statique Keyboard.IsKeyDown() vous aidera à vérifier l'état des clés qui vous intéressent.

if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl) 
     || Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)) 
{ 
    //Load in a special mode 
} 
else 
{ 
    //Load standard mode 
} 
2

Si vous avez vraiment besoin de le faire dans la méthode principale, vous devrez utiliser

[DllImport("user32.dll")] 
public static extern int GetKeyboardState(byte [] lpKeyState); 

docs here

parce que les membres statiques de clavier que vous utilisez normalement ne fonctionnent pas à ce moment:

Keyboard.Modifiers Keyboard.IsKeyDown

Mais vous pouvez essayer de brancher des à l'événement Application.Startup et faire vos tests de clavier là.

+1

il n'a pas envie de faire les importations de DLL. Vous cherchez probablement un moyen qui se trouve dans les espaces de noms .net lui-même. – vikramjb

+0

Vous n'avez pas besoin d'importer quoi que ce soit lorsque vous utilisez Keyboard.Modifiers. Mais il y a une petite chance que Keyboard.IsKeyDown et Keyboard.Modifiers ne fonctionnent pas au début de la méthode principale. C'est là qu'il veut l'utiliser. C'est pourquoi je l'ai présenté à GetKeyboardState. cela fonctionnera dans tous les cas. Il n'y a rien de mal ou de mauvais dans l'utilisation de Dllimport à moins que vous ne soyez bien sûr au clair. – bitbonk

+0

En effet il semble que IsKeyDown ne fonctionne pas à l'intérieur de main. Je vais essayer autre chose. – TalkingCode

0

Vous pouvez vérifier this question [SO]

J'ai eu le même problème et a fini par vérifier les modificateurs de clavier en cas Loaded ...

+0

Pas exactement ce que j'avais en tête. Je veux vérifier les clefs avant que n'importe quelle fenêtre soit chargée parce que si la clef-Ctrl est pressée pendant le démarrage je veux charger une fenêtre complètement différente. GetKeyboardState est la seule chose qui semble fonctionner dans la méthode main. – TalkingCode

+0

Ah ... assez juste :) – PaulB

Questions connexes