Tastendruck an Fenster ohme Fokus schicken
-
Hi Leute!
Wie kann ich einen Tastendruck simluliern?
Das Problem ist, das Fenster, an das gesendet wird, liegt nicht im Fokus und kann auch nicht in den Fokus gerückt werden.keybd_event klappt nur, wenn das Fenster im Fokus ist. Wie kann ich das umgehen?
Mit den Details kenne ich mich nicht so gut aus, was SendMessage angeht.
Ich hab auch schon der nacheinander WM_KEYDOWN, WM_CHAR, WM_KEYUP probiert.Jedenfalls will ich einfach nur, dass das Programm denkt die H-Taste wird gedrückt.
-
HWND hWnd1 = ::FindWindow("notepad", NULL); // Notepad suchen HWND hWnd2 = ::FindWindowEx(hWnd1, NULL, "Edit", NULL); // Editbox des Notepads suchen if(hWnd2) SendMessage(hWnd2, WM_CHAR, 'H', 0); // 'H' an die Editbox des Notepads senden
-
1. Man kann durch senden von Nachrichten keine Tastatureingaben simulieren.
2. Da dies nur mit SendINput korrekt funktioniert folgt daraus, dass Deine Aufgabenstellung zum scheitern verurteilt ist, denn SendInput geht nur an das Fenster, das auch den Focus hat.Was spricht dagegen, den Focus zu setzen?
-
Was JustSomeCoder da andeutet werd ich mal probieren, mal alle Childs auflisten und suchen, welcher der richtge ist.
Ich hab grad mal nachgesehen. Als nächstes wären Mausklicks an der Reihe, kann ich die auch irgendwie ohne Fokus schicken?
Es wäre sehr gut, wenn dazu nichtmal der Cursor bewegt werden müsste.
Ich erläutere mal mein Problem: Ich hab ein Online-Flashgame gefunden. Dafür will ich eine Art Bot schreiben, um durch die Gegend zu laufen und Gegenstände einzusammeln. Der Teil mit dem Objekterkennen hab ich schon, funktioniert auch. Jetzt müsste ich nur den Bot allein steuern lassen können.
Möglichst noch im Hintergrundbetrieb, damit ich andere Dinge erledigen kann, während der Bot sich um das Spiel kümmert.Derzeit mach ich die Maus und Tastatur Eingaben per mouse_event, bzw. keybd_event. Da ich den Bot aber in den Hintergrund verlagern möchte, ist das etwas ungünstig.
-
Ich hab mit EnumChildWindows gesucht und "MacromediaFlashPlayerActiveX" ist die Klasse für das "Spielfenster", wenn ich jetzt WM_KEYDOWN gefolgt von WM_KEYUP schicke funktioniert die Sache.
Jetzt weiß ich wenigstens, dass der Flashplayer Windowsnachrichten für Eingaben benutzt und dich DInput, GetAsyncKeyState oder so.
Darauf wäre ich aber nicht gekommen, wenn mich JustSomeCoder nicht hingewiesen hätte. Danke!
-
*hust* Armseeliger Verlierer *hust*
Solche Typen verderben einem den Spielspaß...
-
Das ist dein Problem.
Man soll doch seine gelernten Fähigkeiten auch sinnvoll anwenden.
Und was sinvoll ist oder nicht, kann jeder für sich selbst entscheiden.
-
Wenn das jeder sagen würde, wäre die Welt im Chaos.
Das was du machen willst ist illegal, ergo falsch == nicht sinnvoll.
-
Mentras schrieb:
Wenn das jeder sagen würde, wäre die Welt im Chaos.
Das was du machen willst ist illegal, ergo falsch == nicht sinnvoll.stfu
-
Mentras schrieb:
Das was du machen willst ist illegal
Das kannst Du sicher irgendwie belegen/begründen?