Wie kann steuern, ein Programm ein anderes Programm Stack-Überlauf
Gestern während der Videospiele zu spielen begann ich Spieler zu denken Bots gemacht, die für Menschen spielen würde, und ich fragte mich, wie sie funktionieren? Haben sie sagen, das Videospiel, dass eine Taste gedrückt wurde oder der Maus angeklickt wurde? Wenn nicht, ist es eine Möglichkeit, Ihr Programm zu haben, wurde ein anderes Programm sagen, eine Taste gedrückt? Ich weiß, dass dies ein ziemlich gefährliches Thema ist, so dass Sie so viel sagen können, wie Sie sich wohl fühlen, auch wenn es nur ein Überblick darüber, wie ein Bot funktioniert. Ich mag ein Projekt aus diesem obwohl machen, wo ich versuche, ein Programm zu machen, die erste Stufe von einem gewissen Spiel zu schlagen. So alle Ressourcen oder Beispiele, die Sie bereit sind, andere Menschen zu sagen, würde geschätzt.
Update: So scheint es klar, dass eine der wichtigsten Möglichkeiten, ein anderes Programm zu steuern Tastenanschläge zu emulieren, so etwas sind einige Methoden, dies zu tun (in jeder Sprache)?
Juni fragte 23 '09 um 13:10 Uhr
Ich habe zu einer Zeit oder ein anderes (von Pogo Spielen zu Yohoho Puzzle Pirates) ein Bündel von Bots geschrieben. Für Fenster, Sie gehen in der Regel entweder Win32 Ereignisse werden das Senden von Mausbewegungen zu simulieren, oder die tatsächlich Low-Level-Nachrichten zwischen den Fenstern gesendet fälschen, wenn die Maus tatsächlich angeklickt wird. Eine Menge davon hängt wirklich davon ab, wie das Programm reagiert (durch die Nachricht mit den Koordinaten zu akzeptieren, oder, in Java Fall sofort die Mauskoordinaten zu lesen). Die „Automatisierung“ -Teil in der Regel beinhaltet die Bildschirm und Schreiben Heuristik oder Algorithmen zu lesen, um den Zustand zu bestimmen, kann aber auch so schön sein wie Paket (eine Menge Informationen dort in einem schlechten Poker-Implementierungen) oder als Hacky als Lesespeicherplätze direkt Sniffing. Ziemlich große „Feld“, und schlecht dokumentiert, wie es ist ziemlich profitabel und nicht schwer zu bekommen in.
Senden Eingang
C / C ++ (in Windows)
Für Schlüssel, versuchen Codeproject:
Ihre beste Wette ist zu lernen, Nachrichten mit dem Win32-API zu senden, dann so etwas wie Spy ++ verwenden oder ihrer Derivate „Reverse Engineering“, wie Tastenanschläge und Mausbewegungen werden an das Fenster geschickt.
Java hat eine erstaunlich tragbare Roboter-Klasse, die in der Lage ist:
- Lesen Pixel vom Bildschirm.
- Steuerung mit der Maus.
- Senden Schlüssel.
Ich würde geben, dass ein Schuss, wenn Sie für eine schnelle und einfache Suche.
Basic-Logic
Dies wird an anderer Stelle beschrieben im Internet in der Tiefe, aber die meisten Bots folgen einem einfachen Programmablauf Zustandsmaschine. Sie lesen den Bildschirm (oder Pakete oder Speicher), herauszufinden, was „Zustand“ Du bist in basierend auf Ihre Messwerte und Daten aus der Vergangenheit, tun Berechnungen, und das Ergebnis wieder aus dem Programm senden.
den Bildschirm zu lesen kann schwierig sein, aber kann leichter gemacht werden, wenn man bedenkt, dass eine Menge Zeit, da ein paar „Glück“ Pixel relativ zu dem Fenster sind, dass Sie eine Vorstellung davon, in welchem Zustand sich das Programm in. Der Prozess der diese Pixel zu finden, kann automatisiert werden.
beantwortet 23 09 Juni um 13:18 Uhr
Einige Programme (wie diejenigen, die für Sie in einem MMORPG mahlen) emuliert einfach Tastenanschläge. Ein Werkzeug, dies zu tun ist AutoIt.
beantwortet 23 09 Juni um 13:13 Uhr
Es gibt ein paar Arten von Bots. Von dem, was ich erinnere mich, als ich verwendet CS spielen (eine lange, lange her)
Einige Bots verwenden, um die Bibliotheken der Anwendung selbst, die Umwelt (die Karte, wo die Spieler sind etc.) zu inspizieren Die Bots auch die Bibliothek benutzen Bewegung zu steuern. Ich bezweifle, dass es viele Bot-Implementierungen sind die Mausnachrichten aufrufen, um das Spiel zu sagen, wie zu bewegen usw.
Einige Bots emulieren die Anwendungsebene-Protokoll (wenn es Multi-Player ist). Also mit anderen Worten, wird das Spiel nicht einmal laufen müssen. Ein Bot kann in einem virtuellen Spiel laufen.
Ich werde entgegen, was ein anderes Plakat laufen hat vorgeschlagen: ein Spiel bietet das Schreiben ist wahrscheinlich eine wertvolle Übung, als tatsächlich das Spiel zu spielen, ist neugierig, wie sie arbeiten, ist ein gutes Zeichen. )
Der größte Fehler in diesem Konzept ist nicht der Eingang, aber das Spiel ausgegeben. Sie Bot kann nicht nur zufällig drücken Tasten, muss er wissen, was „passiert“. Nur sehr wenige Spiele können Sie diese Daten abfragen, die Ihren Bot verlassen würden ein sehr heikeles Problem zu lösen - Konvertieren von 60 Frames pro Sekunde von visuellen 2D-Daten in einen virtuellen Raum.
Es gibt actuially Spiele gibt, die nicht nur bot den Spielern erlauben, aber sie fördern. Offen RTS ist einer von denen, aber es gibt auch einfachere wie GUN-TACTYX und Crobots, die guten Ausgangspunkte sind.
beantwortet 23 09 Juni um 13:21 Uhr
Es hängt sehr stark von dem Spiel. Zum Beispiel habe ich einen Bot für Travian (die ein Online-Spiel ist), dass der Internet Explorer ActiveX verwendet bewegt zu automatisieren. Ich worte die Anwendung in c # und bekommen es Sachen dauerte etwa 30 Minuten zu tun. Es ist ganz einfach Methoden auf dem activeX nennen ein es Dinge tun wie in Textfelder ausfüllen oder auf Schaltflächen klicken. Für die Anmeldung zum Beispiel habe ich das Folowing:
Für die Spiele, die Desktop basieren die Dinge komplizierter. Windows ermöglicht eine Anwendung, Nachrichten an eine andere Anwendung zu senden, so dass ich denke, dass zum Senden von Nachrichten zu einem Spiel verwenden könnte (obwohl wheather dies für Spiele funktioniert, die directX für die Eingabe verwenden, weiß ich nicht)
beantwortet 23 09 Juni um 13:24 Uhr