Wie sende ich Keystrokes an ein Fenster, ohne es mithilfe der Windows-API zu aktivieren?
ich habe aus einer Anwendung, die sendet Befehle an eine aktivierte Fenster. Ich möchte in der Lage sein, den computer zu nutzen, während mein Prozess läuft, weil sobald ich Umschalten des Fokus zu einem anderen Fenster die Tastatureingaben gesendet werden über send-keys gehen an die Fenster, die ich gerade geschaltet.
ich verwende Derzeit FindWindow, IsIconic, und ShowWindow aus der Windows-API. Ich habe zu überprüfen, um zu sehen, ob die Fenster gibt es mit FindWindow und mein Objekt auf die spezifischen Fenster, der zurückgegeben wird, mit diesem Anruf habe ich dann prüfen, ob es sich minimiert mit IsIconic-und call ShowWindow wenn es ist, und dann schließlich habe ich zu nennen Interaktion.AppActivate, setzen Sie den Fokus auf dieses Fenster. All dies wird getan, bevor ich überhaupt senden Tastendrücke. Scheint, wie es sollte ein Weg gefunden werden, senden Sie einfach Tastendrücke, die zimmerreserviereung, ohne das Sie das Fenster anzeigen und aktivieren Sie es. Die große Sache ist, während meine Anwendung läuft, die Tastatureingaben ich kann nichts auf meinem computer.
InformationsquelleAutor der Frage SlipToFall | 2009-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, das ist irgendwie enttäuschend, ich bin mir sicher, aber Sie grundlegend dies nicht mit 100% Zuverlässigkeit.
Windows setzt Voraus, dass das aktive Fenster ist das erste Tastatur-Eingaben. Der richtige Weg, um gefälschte Tastatur-Eingang ist mit SendInputund Sie werden feststellen, dass es sendet Nachrichten an das aktive Fenster.
Dass gesagt wird, können Sie SendMessage WM_KEYUPWM_CHARund WM_KEYDOWN Nachrichten und (abhängig von der WndProc-Empfang) vielleicht Weg mit ihm. Aber denken Sie daran, Ihre zur Pause gehen unter bestimmten Umständen, Punkt.
InformationsquelleAutor der Antwort Kevin Montrose
Klingt wie Sie sind mit keybd_event() oder SendInput(), welche beide das senden von Tastatureingaben an das aktuell aktive Fenster. Direkte Tastatureingaben auf ein bestimmtes Fenster, unabhängig davon, ob widnow ausgerichtet ist oder nicht, Sie brauchen zu finden, dessen HWND-handle zuerst, und dann post entsprechend formatiert WM_KEYUP/DOWN und WM_CHAR-Meldungen direkt an ihn.
InformationsquelleAutor der Antwort Remy Lebeau
einmal haben Sie die windows HWND, können Sie direkt SendMessage() die WM_KEYDOWN und WM_KEYUP Nachrichten in der Nachrichtenwarteschlange. Das Fenster muss nicht aktiv sein.
Jedoch verstehen, dass dies davon abhängt, wie die Ziel-Anwendung verarbeitet die Tastatur-Eingabe. Es gibt verschiedene Möglichkeiten, damit umzugehen.
WM_KEYUP/WM_KEYDOWN ist am häufigsten, und einige Anwendungen, die nur eine oder die andere (in der Regel WM_KEYDOWN).
WM_CHAR ist auch ziemlich Häufig
Einige Programme verwenden GetAsyncKeyState, GetKeyState oder GetKeyboardState. Dies ist äußerst ungewöhnlich, aber effektiv verhindert, dass die Tastendruck-Injektion mit SendMessage(). Wenn dies der Fall ist, fallen Sie zurück zu keybd_event (), die direkt behandelt, indem Sie die Tastatur-Treiber. Natürlich wird das Fenster muss aktiv sein
InformationsquelleAutor der Antwort Anthony Bachler