Global keyboard-capture in C# - Anwendung
Ich will einen Tastatur-shortcut in meiner Anwendung und schafft ein dialog erscheint, wenn der Benutzer drückt eine Tastatur combo auch außerhalb der app. Ähnlich wie Google-Desktop-Suche die Strg -, Strg -, um den suchen-dialog.
Habe ich versucht, mit einigen Tastatur-hook-Module gibt, die im Grunde Win32 interop um diesen Effekt zu bekommen, aber jede Implementierung, die ich habe versucht, Beziehungen auf der Tastatur zum Teil zu, wo Sie beginnen, sich seltsam Verhalten, wenn die Anwendung etwas intensiver. Wie das laden einer großen Menge von Daten, in diesem Fall würden die Tastatur und Maus zu blockieren.
Ich bin auf der Suche nach einer leichten Lösung, würde es erlauben, dies zu tun, ohne Verzurren von Tastatur und Maus.
Siehe stackoverflow.com/questions/81150/...
InformationsquelleAutor Jeremy Edwards | 2009-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stephen Toub schrieb ein toller Artikel auf die Umsetzung Globale keyboard hooks in C#:
Einen Grund, warum dies würde wieder seltsame Zeichen?
InformationsquelleAutor John T
Hier ist mein code, der funktioniert:
Verwendung:
Danke! Ich habe diesen code und es funktioniert.Aber Wenn ich drücken Sie die Taste nach einer Weile, es ist eine Ausnahme, sagt der Delegierte wird Müll gesammelt, und die verwalteten code sollte lebendig zu halten . dann gibt es eine null-Verweis-Ausnahme. können Sie mir helfen mit diesem ?
Hi @Golnar, ich habe auch dieses problem. Stellen Sie sicher, dass keine statischen Sachen umgehen, ist es sehr gefährlich in den Kontext von garbage collection. Vor allem die Veranstaltung.
Ich würde empfehlen, hinzufügen
public Keys Key { get { return (Keys)VirtualCode; } }
zuLowLevelKeyboardInputEvent
. Dies nimmt die Notwendigkeit, sich mit der virtual-codes, die jeder hat, zu google. Außerdem: können Sie dann ändernVkSnapshot
von einemint
zuKeys
und leicht legen Sie einfach eine Taste. Ich ging einen Schritt weiter und platziert einepublic static Keys[] RegisteredKeys
. OnPressed kommtif (!GlobalKeyboardHook.RegisteredKeys.Contains(e.KeyboardData.Key)) return;
. Sie könnte sicher nur verhindern, dass das Ereignis ausgelöst wird ;).InformationsquelleAutor Siarhei Kuchuk
Wenn ein globaler hotkey genügen würde, dann RegisterHotKey würde den trick tun
InformationsquelleAutor Joe