Wie zum senden von Tastatureingaben an ein Fenster?
im mit keybd_event(); und ich will SendMessage(); senden Tastendruck in den Editor, kann das getan werden?
InformationsquelleAutor H4cKL0rD | 2010-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
mit
SendMessage
einfügen von text in das edit-buffer (die es klingt wie Sie wollen):wenn Sie brauchen, keycodes und beliebige Tastenanschläge, die Sie verwenden können,
SendInput()
(erhältlich in 2k/xp und bevorzugt), oderkeybd_event()
` (wird am Ende aufrufen SendInput in neueren OSs) hier einige Beispiele:http://www.codeguru.com/forum/showthread.php?t=377393
gibt es auch WM_SYSCOMMAND/WM_KEYDOWN/WM_KEYUP/WM_CHAR-Veranstaltungen für SendMessage, die Sie interessieren könnten in.
Tut es das nicht. Du musst durch ein Fenster, Griff in die
hWnd
parameter. Auch, das Fenster-handle ist der erste - parameter, nicht der Dritte.Sie können nicht verwenden SendMessage() zum senden von Tastatureingaben. Sie können nicht über die Tastatur Zustand. Besonders die Shift -, Control-und Alt-Tasten.
Auch WM_SETTEXT, nicht senden Tastatureingaben. In jedem Fall können Sie es nicht zuverlässig mit SendMessage() als nobugz erwähnt. Siehe blogs.msdn.com/oldnewthing/archive/2005/05/30/423202.aspx
Sie brauchen nicht zu senden Tastatureingaben, um text einzugeben. die OP bereits kennt
keybd_event
. die Frage ist, über die VerwendungSendMessage
InformationsquelleAutor jspcal
keybd_event() wurde ersetzt mit SendInput(), so ist es am besten zu verwenden. Hier finden Sie einige Beispiel-code, um zu tun, was Sie gefragt haben. Sie können entweder direkt Bearbeiten das Editor-Fenster das edit-Steuerelement mithilfe von SendMessage () verwenden, oder Sie können SendInput() zu synthetisieren, Tastatureingaben werden an das Fenster.
Mit
SendInput()
:Mit
SendMessage()
:Ich hoffe, das hilft.
Nein, das sollte funktionieren sowohl für Unicode und nicht-Unicode-builds. (Habe es gerade getestet.) Ja, GetMessageExtraInfo()
Ich bin mir nicht ganz sicher, was du meinst, über
KEYEVENTF_KEYUP
gelassen zu werden. Ich bin mir auch nicht sicher, was Sie meinen, über den Teil der Dokumentation, die Sie verstehen. Wenn Sie sich Fragen, warum die beiden key-down und key-up-Tastatur-Ereignisse erforderlich sind, ist, weil diese verwendet werden, generiert die entsprechenden WM_KEYDOWN undWM_KEYUP
Fenster-Nachrichten für das Ziel-Fenster. Wir arbeiten auf einem niedrigen Niveau, und ich glaube nicht, dass die Windows-API bietet eineWM_KEYPRESS
Meldung zum darstellen einer einzigen Taste drücken.mit
WM_KEYDOWN
undWM_KEYUP
ist eigentlich eine ziemlich gute Lösung, denn es ist sehr kompatibel. Dies ist, weil diese Fenster-Nachrichten sind standard für fast alle Windows-Anwendungen. Trennen Sie gibt uns mehr Kontrolle, auch. Die einzigen Arten von Windows-Anwendungen, ich kann mir denken, dass würde nicht diesen Ansatz unterstützen sind diejenigen, die DirectInput statt. Ein Nachteil: SendInput sendet nur die Nachrichten an, die momentan fokussierte Fenster, das könnte so etwas wie ein Menü statt dem text-Feld.Sorry copy-paste-Fehler. Hatte ich auch, aber MS sollte cleary unterscheiden zwischen dem Zeichen, das gesendet wird, und die diejenige, die als Eingabe verwendet werden. Das ist, was ich missverstanden auf den ersten Blick. Was ich noch nicht verstehe, ist, warum KEYEVENTF_SCANCODE übrig ist. Als pro-Dokumentation "... Wenn angegeben, wScan identifiziert den Schlüssel und wVk wird ignoriert." Aus hier
InformationsquelleAutor Sam