Wie zum senden von Strg/Shift/Alt + Taste Kombinationen, um eine Anwendung Fenster? (via SendMessage)
Ich erfolgreich senden können jede einzelne Taste Nachricht, um eine Anwendung, aber ich weiß nicht, wie das senden von Tastenkombinationen (wie Strg+F12, Shift+F1, Strg+R, etc..)
Versucht, es zu tun auf diese Weise:
SendMessage(handle, WM_KEYDOWN, Keys.Control, 0);
SendMessage(handle, WM_KEYDOWN, Keys.F12, 0);
SendMessage(handle, WM_KEYUP, Keys.F12, 0);
SendMessage(handle, WM_KEYUP, Keys.Control, 0);
aber das scheint nicht zu funktionieren (Anwendung wirkt, wie nur die F12 gedrückt wird, nicht Strg+F12).
Irgendwelche Ideen, wie diese Arbeit zu machen?
mögliche Duplikate von PostMessage WM_KEYDOWN senden multiplizieren Schlüssel?
es gibt keine anwser für die Frage in diesem Zusammenhang.
Die Antwort ist die Verwendung
die OP hat nicht der Staat seine Anforderungen klar. Ich bearbeitet meine Antwort, um zu zeigen, dass das, was er sich wünscht, ist nicht möglich, auf jeder beliebigen version von Microsoft Windows.
es gibt keine anwser für die Frage in diesem Zusammenhang.
Die Antwort ist die Verwendung
SendInput
. Ich schaute in den Schlüssel-codes, die SendMessage verwendet, und Sie sind tatsächlich Verschieden von der Keys
enum, Sie sind 8-bit. Das heißt, Sie können nicht bitweise oder zum senden von zwei Tasten gleichzeitig (wie ich vorgeschlagen hatte in meiner Antwort).die OP hat nicht der Staat seine Anforderungen klar. Ich bearbeitet meine Antwort, um zu zeigen, dass das, was er sich wünscht, ist nicht möglich, auf jeder beliebigen version von Microsoft Windows.
InformationsquelleAutor user1792042 | 2012-11-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie wahrscheinlich finden, dass mithilfe von SendInput (Dokumentation hier) funktioniert viel besser. Sie benötigen, um P/Invoke, C#, Beispiel hier. Sie können Daten-arrays mit den Tasten nach oben und unten und richtig den anderen message-Parameter, zum Beispiel ob Links oder rechts, StrgundShiftundAlt gedrückt wurde.
Können Sie auch die
SendKeys
Klasse (Dokumentation hier). Hier legen Sie die Schlüssel nach name, z.B.{^F12}
für Strg+F12.Bearbeiten: Die OP ist nun zu sagen, die er senden muss, um Eingang zu minimierten Anwendungen, ohne Sie zu aktivieren. Ist dies nicht möglich, zuverlässig zu irgendeiner Weise, einschließlich selbst mit spezieller hardware. Ich habe gearbeitet in der Automatisierung. Es ist einfach nicht möglich. Der OP nutzen muss, die
FindWindow
/SetForegroundWindow
so wechseln Sie die Ziel-app auf und dann kann er wechseln zurück zu seiner Anwendung.Aktivieren Sie das Ziel-Fenster vor Beginn der SendInput Anrufe.
Ich habe auch noch einen link zu SendKeys.
SendKeys funktioniert, mein Ziel-Anwendung registriert Strg+F12-Kombination, ABER es erfordert die Ziel-Anwendung aktiv sein, und meine Anwendung benötigt, um Arbeit im hintergrund, also ich kann es nicht verwenden
zunächst sollten Sie Hinzugefügt haben, die als Voraussetzung in deiner Frage. Zweitens können Sie nicht zuverlässig SendMessage verwenden für die simulation von Tastatureingaben. Drittens, Sie können nicht zuverlässig senden Eingabe für eine Applikation im hintergrund. Sie können jedoch, aktivieren Sie die Zielanwendung und dann wieder aktivieren Ihre.
InformationsquelleAutor Ed Bayiates
Ich habe bereits versucht, die Methode mit GetKeyboardState und SetKeyboardState (vorausgegangen durch das anbringen der Fenster-thread und endete mit der Trennung von Fenster-thread). Ich funktioniert nicht für Tastenkombinationen wie Strg+Irgendwas oder Kombinationen mit Alt oder Shift auch. Strg, Alt und Shift-Tasten sind nicht als gedrückt. Es scheint, wie die maximale, die Sie bekommen können, wenn das Fenster minimiert ist, drücken der einzelnen Tasten mit PostMessage mit WM_KEYDOWN-Nachrichten. Eine andere Sache, die mir aufgefallen ist, dass wenn Sie Post WM_KEYDOWN und WM_KEYUP (für dieselbe Taste) die Taste zweimal hintereinander gedrückt. Also nur verwenden, WM_KEYDOWN eine Zeit. Dies ist nicht eine 100% genaue Methode, aber wenn das Fenster minimiert ist, gibt es einige Einschränkungen.
Die gleiche situation tritt ein, wenn der Bildschirm gesperrt ist.
InformationsquelleAutor daniel
Übermittlung von input zu minimierten Anwendungen ist in der Tat möglich, nicht sicher über Maus, aber Tastatur-Eingabe funktioniert Prima.
Einnahme-Idee in einer früheren Antwort hier ist, was ich in der Lage war zu erreichen (code ist in Delphi, aber es ist ziemlich einfach, so können Sie übersetzen Sie in Ihre gewünschte Sprache):
[Win] muss die Steuerung die Eingabe empfangen, nicht das übergeordnete Formular etc.
[Key] ist eine Taste gedrückt werden;
[sKey] ist eine alternative-Taste gedrückt, während Sie die Taste [Key] wie STRG/SHIFT (ALT übertragen wird, durch die Nachricht selbst, finden Sie im MSDN-WM_KEYDOWN Referenz für details).
Senden einer Sohle Tastenanschlag ist relativ einfach, Sie haben einfach die sendmessage und fertig, aber wenn Sie brauchen, um so etwas wie STRG+Leertaste, hier wird es kompliziert. Jeder thread hat seinen eigenen KeyboardState, verändern KeyboardState in Ihre eigene app wird nicht auf einem anderen, es sei denn, Sie verbinden Ihren thread Eingänge durch AttachThreadInput Funktion. Bei der Anwendung verarbeitet WM_KEYDOWN Nachricht, die es auch tests, die aktuelle shift-Staaten (STRG/SHIFT) durch den Aufruf GetKeyboardState-Funktion (ALT-Taste gesendet werden kann durch den zusätzlichen parameter der WM_KEYDOWN Nachricht) und das ist, wenn Sie angebracht thread-Eingang ins Spiel kommt.
InformationsquelleAutor Rusty
Vielleicht sind Sie auf der Suche etwas wie:
...
GoCursorUp(Self);
Oder so etwas wie dieses:
InformationsquelleAutor user2034020
Wenn Sie wollen, simulieren Sie Tastenanschläge, um minimierte Fenster können Sie etwas wie das hier tun:
Nächste Schritt ist die Verwendung GetKeyboardState Funktion, um ein array aller Schlüssel Staaten des Fensters thread.
Ändern Sie den Zustand der UMSCHALT-oder STRG-oder ALT-Tasten gedrückt, mit Ihren virtuellen key-codes. Dann rufen Sie SetKeyboardState gelten diese Staaten. Drücken Sie die F12-Taste:
Ändern zurück den Staaten der UMSCHALT -, STRG-oder ALT-Tasten, wie Sie freigegeben werden. Rufen Sie SetKeyboardState wieder. Schließlich lösen sich vom Fenster thread:
InformationsquelleAutor daniel