/ / VB.NET: In ProcessCmdKey einfachste Möglichkeit, um festzustellen, ob ein Schlüssel gedruckt wird oder nicht? - vb.net, winforms, keyboard

VB.NET: In ProcessCmdKey einfachste Methode, um festzustellen, ob ein Schlüssel gedruckt wird oder nicht? - vb.net, Winforms, Tastatur

Was ist der einfachste Weg, um festzustellen, ob aTastendruck ist ein druckbares Zeichen (eines, das in einem Textfeld angezeigt werden soll) oder nicht? Ich möchte Tasten wie F1, Home usw. von denen trennen, die tatsächlich in einem Textfeld angezeigt werden. Ich versuche, eine massive IF-Anweisung zu vermeiden, indem ich alle nicht druckbaren Zeichen selbst identifiziere.

Die Verwendung eines Ereignisses wie KeyUp, KeyPress usw. ist aufgrund des Designs des Steuerelements nicht möglich.

Antworten:

5 für die Antwort № 1

Es gibt keinen einfachen Weg. Und du solltest noch nie Versetze dich in diese Lage. Die Übersetzung von virtuellen Schlüsseln, wie sie in ProcessCmdKey oder KeyDown beobachtet wird, in das Eingeben von Schlüsseln, wie sie vom KeyPress-Ereignis beobachtet wird, ist sehr kompliziert. Dies hängt vom Tastaturlayout ab, das der Benutzer ausgewählt hat. Die Tastaturlayouts sind von Maschine zu Maschine auf der ganzen Welt sehr unterschiedlich. Eine chinesische Tastatur sieht nicht wie eine englische Tastatur aus, das können Sie sich sicherlich vorstellen. Darüber hinaus verwenden Sprachen mit vielen Zeichen wie Chinesisch und Japanisch ein spezielles Programm, mit dem der Benutzer eines von Zehntausenden von Glyphen auswählen kann Ein IME (Input Method Editor).

Besonders problematisch sind auch die "toten Schlüssel",Sondertasten auf einigen Tastaturen, mit denen Buchstaben mit diakritischen Zeichen eingegeben werden. In Englisch nicht verbreitet, in anderen Teilen der Welt sehr verbreitet. Wie die AltGr-Taste auf einer deutschen Tastatur. Solche Layouts sind sehr Staatsbürgerlicherzeugt ein Schlüssel a anders Eingabe von Zeichen in Abhängigkeit von diesem Zustand. Mit anderen Worten, welche toten Tasten wurden vorher gedrückt. Dieser Status ist ebenfalls prozessspezifisch und kann von keinem anderen Prozess abgerufen werden.

Ich habe dich wahrscheinlich nicht genug erschreckt, schwer zu tunmit einem englischsprachigen Programmierer. Vorsicht vor dem Wind, und es hört sich so an, als ob Sie dies nur für Ihren eigenen Prozess tun möchten. Sie können die Winapi-Funktion ToUnicodeEx () aufrufen. Es benötigt den Tastaturstatus, den Sie durch Pinvoking von GetKeyboardState () erhalten. Es benötigt das aktive Tastaturlayout, das bekommt man von GetKeyboardLayout (). Welche Thread-ID benötigt, erfahren Sie von GetCurrentThreadId (). Ein Rückgabewert von 1 oder mehr zeigt an, dass das KeyPress-Ereignis wahrscheinlich ausgelöst wird. Besuchen Sie pinvoke.net, um zu sehen, ob die Pinvoke-Deklarationen korrekt sind.