Question

RÉPONSE: Il n'y a pas d'équivalent géré nativement pour cette méthode. Cependant, un bon exemple géré API de code se trouve sur pinvoke.net .

Salut à tous

J'ai une application qui accepte un drapeau pour « mode de trace ». Trace tours de mode sur un formulaire contenant une zone de texte. La zone de texte affiche la sortie via un objet TraceListener personnalisé. S'il est présent sur la commande -t ligne, la fenêtre de trace sera ouverte à partir de son propre fil à faible priorité. Il est très pratique pour les consultants qui tentent de diagnostiquer l'application en cas de problème.

Quelques consultants ont demandé une combinaison de touches en appuyant sur obscur lors du démarrage doit activer le mode de trace afin qu'ils ne doivent pas aller à la ligne de commande pour l'activer à chaque fois. Il est une demande raisonnable.

Je ne veux pas leur donner un bouton ou un élément de menu pour cela, car beaucoup de l'information essentiel que les consultants se soucieront est affiché à Trace au démarrage avant que le formulaire principal est créé comme les différents composants sont instanciés et initialisées.

Je pensais que cela aurait dû être assez simple pour détecter l'état du clavier actuel dans .NET - mais il semble que partout où je regarde, les conseils est d'utiliser [DllImport ( « user32.dll », EntryPoint = « GetKeyboardState », SetLastError = true)] comme méthode pour détecter ce qui se passe.

C'est très bien - je suis à l'aise avec cela. Toutefois, en règle générale, j'essaie de vous assurer que j'utiliser le code managé .NET natif pour les fonctions de Windows avant que je vais essayer de rouler mon propre.

Y at-il une méthode .NET native ou équivalent à GetKeyboardState?

de user32.dll
Était-ce utile?

La solution

Control.ModiferKeys est une propriété statique de Control qui, le cas échéant, touches de modification sont actuellement pressés. Je ne suis pas au courant de quoi que ce soit pour obtenir l'état du clavier général, apparaît comme la plupart des codes P / Invoke soit GetKeyboardState ou GetKeyState pour le contrôle de touches spécifiques.

Autres conseils

Êtes-vous sûr que PreviewKeyDownEventArgs n'a pas ce dont vous avez besoin? Le cas échéant, vous pouvez utiliser l'événement PreviewKeyDown.

Une autre option pourrait être l'accélérateur clés. Une fonction API Windows peut utiliser une table d'accélérateur dans les ressources de l'application à la carte des séquences clavier aux commandes, où une commande est la même chose qu'un élément de menu ne; vous le savez, un message WM_COMMAND. Je sais qu'il est facile à faire dans MFC en C ++ mais quand j'ai essayé de trouver le chemin C # pour le faire, je me suis perdu. Si vous pouvez comprendre comment faire les touches de raccourci en utilisant C # alors il pourrait être une solution flexible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top