Mit SendMessage die Eingabe von text in ein edit-Steuerelement die Zugehörigkeit zu einem anderen Prozess
Möchte ich einrichten text im edit-Feld programmgesteuert in anderen Programm, das ist ein Spiel-app und mithilfe von directX, sondern laufen im Fenster-Modus. Ich bin dabei:
HWND hWnd = FindWindow(NULL,"Game");
HWND edit = FindWindowEx(hWnd, NULL, "Edit", NULL);
SendMessage(edit, WM_CHAR, (TCHAR) 'H', 0);
SendMessage(edit, WM_CHAR, (TCHAR) 'E', 0);
SendMessage(edit, WM_CHAR, (TCHAR) 'L', 0);
SendMessage(edit, WM_CHAR, (TCHAR) 'L', 0);
SendMessage(edit, WM_CHAR, (TCHAR) 'O', 0);
diese nicht für mich arbeiten.... aber einige, wie die einst arbeitete. Ich denke, dass ich da etwas falsch verstanden, vielleicht muss es den Fokus auf die edit-control, dann setzen Sie den cursor dann text einfügen und dann deaktivieren konzentrieren... ich realy weiß nicht viel...bitte speichern Sie meine Zeit und meine Nerven, die mir sagen, wie es funktioniert....
Versuchte ich dieses auch, und nicht arbeiten:
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)"text");
hwnd ist richtig, aber der text wird nicht aktualisiert... schicken, um korrekt behandeln, aber nicht aktualisiert.... Ich glaube, ich muss mich irgendwie zu konzentrieren oder zu aktualisieren, sobald es aktualisiert erfolgreich, aber ich habe nicht realisiert, was passiert ist...also code einmal geklappt, aber nicht mehr funktioniert... warum es funktioniert?
WM_SETTEXT
eher als Versuch, fake Tippen?Heffernan habe ich versucht, aber funktioniert nicht: SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)"Meintext"); ich denke, ich brauche, um den Fokus oder andere Sache zu tun, bevor ich den text einzustellen...aber wie?
Es gibt keine Fehlerkontrolle, die auf die FindWindow-Anrufe. Sind Sie arbeiten? Sie muss getan haben einige debugging, ja?
Wenn Sie nicht bekommen kann
WM_SETTEXT
zu arbeiten, wird nichts funktionieren. Absolut keine Notwendigkeit, sich zu setzen, bevor WM_SETTEXT
. Sie denken SendInput
, aber Sie nicht tun. Martin ist sehr wahrscheinlich Recht. Wenn Sie nicht überprüfen Fehler dann etwas falsch sein könnte.Heffernan hwnd ist richtig, aber der text wird nicht aktualisiert... schicken, um korrekt behandeln, aber nicht aktualisiert.... Ich glaube, ich muss mich irgendwie zu konzentrieren oder zu aktualisieren, sobald es aktualisiert erfolgreich, aber ich habe nicht realisiert, was passiert ist...also code einmal geklappt, aber nicht mehr arbeiten...
InformationsquelleAutor Jigberto | 2012-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage ist Geld! Ernst. Lassen Sie uns sagen, ein kleiner Vogel erzählte mir, was ist das Spiel, das Sie interessiert sind, an (beginnt mit einer S). Ich verbrachte ein paar Stunden, um mich auf dieses problem, und ich habe einen gewissen Erfolg gehabt, so dass ich es mit Ihnen teilen.
Gibt es ein tool namens Spy++ (von Microsoft), dass wir Sie beobachten Nachrichten, die gesendet werden, um ein Fenster/Klasse. Dies ist ideal für Debuggen, weil es ermöglicht die überwachung der Nachrichten, die gesendet werden, um das EDIT-Feld beim drücken einer Taste auf Ihrer Tastatur, so können Sie herausfinden, die genaue Aufrufe und Parameter, die gesendet werden, um das Spiel zu simulieren diesen Vorgang.
Spy++, verwenden um öffnen Sie die Spiel-Prozess, und sobald Sie in Spiel-login-Fenster sehen Sie, dass spy++ Berichte mehrere threads eröffnet, in diesem Prozess, aber nur einen thread zu haben, 3 Felder BEARBEITEN. Das ist das Thema, das Sie interessiert sind!
Beachten Sie auch, dass weder der EDIT-Boxen haben eine Beschriftung, also der folgende code funktioniert nie:
und durch die Art und Weise, immer stellen Sie sicher, dass
FindWindowEx()
etwas zurückgibt, gilt, sonst, wie würden Sie wissen, dass es gelang das Auffinden der edit-box?Was man stattdessen tun sollte, ist:
Und diese finden das erste Eingabefeld. Dieses Feld entspricht dem Feld Benutzername. Das Spiel wird mit 3
PostMessage()
Anrufe zu simulieren, eine Taste drücken, und nichtSendMessage()
als Sie versuchten:Spy++ wird offenbaren, was die anderen Parameter sind, keine Sorge. Sie werden wahrscheinlich verbringen einige Zeit, herauszufinden, wie der Letzte parameter des Aufrufs eingebaut ist (weil es eine Maske).
Ich habe nicht in der Lage zu senden-Tasten zu dem Spiel, wenn es minimiert wurde oder ohne Fokus. Sie müssen diese Figur ein. Für Testzwecke verwenden können
SetForegroundWindow(window_hwnd);
und noch einiges mehr, um den Fokus der Fenster.InformationsquelleAutor karlphillip
Look für den source-code Autoit.
Autoit ist in der Lage, senden Sie die Tasten/Maus einfach über alles.
Wenn neuere Versionen von Kaspersky Anti-Virus installiert sind, es verwirrt mit
SendMessage|SendInput
Art Dinge zwischen Prozessen.Bearbeiten:
Für die Leute, die darauf hinweisen, dass Autoit ist eine riesige Klumpen von code zu Graben, um diese Aufgabe zu erfüllen:
Autoit in der Lage ist zu senden ein, um hintergrund-apps, die nicht wollen, um zu sehen, injiziert Eingang. Es ist nicht eine triviale Aufgabe leicht gemacht. Es gibt Spiele da draußen, die nicht wollen, um zu sehen, alle scripted-Eingang in irgendeiner form, und Sie gehen aus dem Weg, um es zu verhindern. Es gibt auch AV-Lösungen in die wild-block inter-Prozess-input-Injektion. Autoit irgendwie funktioniert, um die Blöcke in eine Menge von Fällen.
Ist Ihre Antwort wirklich herunterladen, der ohne Zweifel riesigen Körper der source-code für Autoit und jagen Sie herum und versuchte, es zu verstehen? Klingt nicht der produktivste Ansatz für mich.
Dieses Programm, auf die ich senden möchten, der text ist ein Spiel, und es ausblenden, Bearbeiten-Feld, wenn sich die Maus bewegt cursor aus und es zeigen, wenn der Maus-cursor nach oben, ... also vielleicht ist es gerichtet werden muss oder aktiviert bevor ich den text senden, aber ich weiß nicht, wie zu tun.... Ich versuche zu sehen, in Spy++ und Meldungen anzeigen.....
ist sicherlich Recht - es ist nicht notwendig, sich ein edit-sich vor der Einstellung seiner text. Wenn Sie es war, die meisten meiner apps nicht funktionieren würde!
Es scheint, dass Sie sich bereits entschieden haben, dass Sie wissen, was das problem ist. In dem Fall ist, warum sind Sie Frage stellen? Oder anders gesagt, warum hat Sie die Frage reden, senden
WM_CHAR
Nachrichten? Sie haben sich entschieden, Ihr problem ist das setzen des Fokus auf ein bestimmtes Steuerelement zu Bearbeiten. Sie übernehmen nicht alle Vorschläge von uns. Wenn Sie wissen wollen, wie den Fokus, dann Fragen Sie diese Frage.InformationsquelleAutor JimR