Holen Sie sich alle Tasten, die gedrückt werden
Was muss ich verwenden, um in der Lage zu bekommen, "alle Tasten", die auf der Tastatur gedrückt im moment? Da Form.KeyPress += new EventHandler()
nicht viel tun, wenn es ' s gefüllt mit Steuerelementen. Es ruft nicht an, egal was ich mache, weder KeyDown, KeyUp oder sonst was... und ja, ich weiß, wie Sie zu verwenden sind.
So, wenn es irgendwelche Funktion im system, können für den gedrückten Tasten, das gibt ein array mit den verwendeten Schlüssel oder so - ich wäre dankbar, schon in die richtige Richtung.
Möchten Sie alle Tasten gedrückt, wenn Sie ein bestimmtes Stück code, oder willst du ein Ereignis, das geschieht, wenn eine Taste gedrückt wird?
möglich, Duplikat der Beste Art der Umsetzung Tastenkombinationen in winforms?
Sagen möchte ich habe einen eventhandler für das Mausrad, aber ich möchte die "Strg" - Taste gedrückt werden, wenn ich ausführen, etwas in den Event-Handler. also, Wenn ich das scroll-Rad bekomme ich nur die Ergebnisse des Mausrads, nicht das keypress.
möglich, Duplikat der Beste Art der Umsetzung Tastenkombinationen in winforms?
Sagen möchte ich habe einen eventhandler für das Mausrad, aber ich möchte die "Strg" - Taste gedrückt werden, wenn ich ausführen, etwas in den Event-Handler. also, Wenn ich das scroll-Rad bekomme ich nur die Ergebnisse des Mausrads, nicht das keypress.
InformationsquelleAutor Deukalion | 2012-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt es wie Sie wollen, um die Abfrage des Status aller Tasten der Tastatur. Die beste Funktion ist, dass die Win32-API-Aufruf
GetKeyboardState
Glaube ich nicht, es ist eine gut verwaltete äquivalent zu dieser Funktion. Die PInvoke-code ist Recht geradlinig
So füllen Sie die
byte[]
mit den up /down-Zustand jedes virtuellen Schlüssel in dem system. Wenn das höchste bit gesetzt ist, dann die virtuelle Taste ist aktuell gedrückt. Die Zuordnung einesKey
zu einem virtuellen Schlüssel-code erfolgt nur unter Berücksichtigung derbyte
Teil der numerischenKey
Wert.Den oben genannten arbeiten für die meisten
Key
Werte, aber Sie müssen vorsichtig sein, mit Zusatztasten. Die WerteKeys.Alt
,Keys.Control
undKeys.Shift
funktioniert hier nicht, weil Sie technisch Modifikatoren und nicht wichtige Werte. Nutzen Modifikatoren, die Sie verwenden müssen die tatsächliche zugeordneten Schlüssel-WerteKeys.ControlKey
,Keys.LShiftKey
usw ... (eigentlich alles, was endet, mit Schlüssel)Also überprüfen, ob ein bestimmter Schlüssel festgelegt ist, kann wie folgt erledigt werden
gute Entscheidung, vergaß diese Einträge
Ja... Aber einer, der noch nicht verwendet, diese Dinge vor dem es gut sein könnte, was namespaces, die ich brauche, warum DllImport zeigt rot, warum GetKeyboardState ist nicht nirgends zu finden ist, etc, etc... Half baked Antworten bedeutet ich Suche mehr nach Antworten ist gleich keine Antwort.
ist ein normaler Typ, ich hatte nicht das Gefühl, die Notwendigkeit, einen namespace espc, da die IDE nur gehört es für Sie, wenn Sie wählen Sie den namespace in der auto-Korrektur-drop-down. Auch
GetKeyboardState
nicht ein .Net-Funktion. Es ist eine einheimische, die ich importiert, wenn Sie kopieren und einfügen, in meiner definition, es sollte funktionieren.InformationsquelleAutor JaredPar
Habe ich erweitert auf JaredPar die Antwort ein wenig. Die folgende Methode liefert die collection aller Tasten, die gerade gedrückt:
DistinctVirtualKeys
Abtretung in VB.Net. Können Sie kommentieren es besser und auch ich bekomme den Fehler, dass es keinen parameter für.Select(KeyInterop.KeyFromVirtualKey)
?Fügen Sie einen Verweis, um WindowsBase. Dort finden Sie den
enum System.Windows.Input.Key
linkInformationsquelleAutor briantyler
Wenn Sie nur brauchen zu wissen, alle Tastenanschläge, wenn die Anwendung aktiv ist, unabhängig davon, welches Steuerelement in Ihrer Anwendung den Fokus hat, als Sie verwenden können, die
KeyPreview
- Eigenschaft des Formulars.Einfach die Eigenschaft auf true gesetzt und abonnieren Sie die gewünschten Wichtigsten Ereignisse auf die form. Jetzt erhalten Sie alle Tastenanschläge, die in Ihrer Anwendung, bevor Sie an die konkrete Kontrolle, so dass Sie reagieren auf dich drauf und kündigen Ihre Weiterleitung an die Steuerung Einstellung der
Cancel
- Eigenschaft auf true.Wenn Sie brauchen, um zu erhalten die gedrückten Tasten, während Ihre Anwendung ist nicht aktiv, dann müssen Sie irgendeine Art von low-level-keyboard-hook. Habe ich nicht getestet, aber dieser Artikel auf CodeProject sieht Recht vielversprechend für diesen Fall.
InformationsquelleAutor Oliver
Ich glaube, Sie sind auf der Suche für die PreviewKeyDown Ereignis, das ausgelöst wird, wenn eine Taste gedrückt wird, während das Formular den Fokus hat, auch wenn weitere untergeordnete Steuerelement in das Formular aktuell den Fokus hat.
InformationsquelleAutor Servy