Konvertieren Zeichen virtual key code
Ich habe eine Reihe von Werten, und ich möchte zum simulieren von Tastatur-events in einem Fenster für jedes Zeichen.
Plane ich auf senden WM_KEYDOWN, WM_CHAR, und WM_KEYUP Ereignisse an das Fenster (so, dass ist das, was zu geschehen scheint, whan eine Taste manuell gedrückt).
Diese Nachrichten erfordern einen int gesendet werden, in der wParam-basierend auf einer Tabelle virtual key codes. Ich kann in einer Schleife durch den string und erhalten Sie jedes Zeichen, aber wie kann ich das Zeichen und die Konvertierung in einen Wert, der entspricht, um den virtuellen Schlüssel-code? Konvertieren.ToInt32() funktioniert nicht.
InformationsquelleAutor Jeremy | 2010-06-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Senden WM_KEYDOWN/UP ist lästig. Die Anwendung selbst bereits übersetzt die WM_KEYDOWN Nachricht in WM_CHAR, über den Status der modifier-Tasten (Shift, Alt, Strg) und die Tastatur-layout. Weder von denen, die Sie kontrollieren können, erhalten Sie die falschen Zeichen, zufällig.
Senden Sie einfach WM_CHAR-Meldungen, setzen Sie den wparam auf den Charakter-code. Keine Notwendigkeit, über sorgen, lparam, einige apps, die es überhaupt verwenden.
Stimmt, diese Antwort ist wahrscheinlich der beste Weg zu gehen, es sei denn, Sie versuchen zu Mach was anderes mit jedem keydown/keyup, gibt es keine Notwendigkeit zum senden der
WM_KEYDOWN
oderWM_KEYUP
Nachrichten -- nichts Magisches passiert.InformationsquelleAutor Hans Passant
VkKeyScanEx jemand? Laut MSDN:
(Könnte man evtl. auch verwenden VkKeyScan aber Vorsicht, es wurde abgelöst durch VkKeyScanEx.)
HKL myKL = LoadKeyboardLayout( "00000409", 0x00000001 );
dann nurVkKeyScanEx( yourChar, myKL );
InformationsquelleAutor Andreas Magnusson
Es sieht aus wie es dauert, die ASCII-Zeichen und wandelt es in hex. Für Beispiel, 'A' in hex 41. Nach Ihrem Diagramm, ist 0x41, welcher der richtige ist (das 0x detoniert hex).
'0 x detoniert hex' Ah, die Tücken der low-level-code. Diese zen-Leckerbissen hat eine Menge erklären.
InformationsquelleAutor Dominic K
Generell, anstatt
WM_KEYDOWN
,WM_CHAR
undWM_KEYUP
Nachrichten direkt verwenden, sollten SieSendInput
(bevorzugt) oder evtl.keybd_event
(veraltet).InformationsquelleAutor Jerry Coffin
Können Sie Input Simulator - Bibliothek, die eine high-level-api für die Simulation von Tastenanschlägen und behandelt alle low-level " - Sachen.
InformationsquelleAutor Giorgi
System.Windows.Formen.SendKeys
ist eine WinForms-Klasse mit statischen Methoden für die Simulation von Tastatureingaben an das aktive Fenster.Der Haken ist, dass .NET hat keine Möglichkeit mit Schwerpunkt windows in einer anderen Anwendung (die SendKeys-docs reden, wie man umgehen können).
InformationsquelleAutor Powerlord
Die Allgemeine Lösung ist die Verwendung der SendMessage WinAPI-Funktion. Dieser link beschreibt
SendMessage
's Signatur und bietet eine sample-import.Oh, und, um-Karte VK-codes, die Sie verwenden sollten, MapVirtualKey - seine besten übernehmen die Zuordnung ist willkürlich und nicht logisch.
InformationsquelleAutor bobobobo