2009-05-09 1 views
6

Ich mache einen Bot für ein Flash-Spiel, und ich habe herausgefunden, wie Sie alle AutoIt Funktionen in meinen C# -Code importieren.Senden von Nachrichten an ein Flash-Spiel mit C# und AutoIt

string title = "Minesweeper"; 
string full = auto.WinGetTitle(title,""); 
string handle = auto.WinGetHandle(full, ""); 
if (auto.WinExists(full, "") == 1) 
    textBox1.Text = "window exists"; 
addressBox.Text = full; 

for (int r = 1; r < 40; r++) 
{ 
    auto.ControlClick(full, "", "", "left", 2, r * 10, r * 10); 
    //auto.ControlClick(handle, "", "", "left", 2, r * 10, r * 10); 
} 

(Ich bin mir ziemlich sicher, dass das unkommentiert eines derjenige mit Griff und umgekehrt sein sollte, aber das funktioniert für Minesweeper.)

So ist es für Sweeper funktioniert und es nicht zu sein, benötigt das aktive Fenster. Wenn ich versuche, dass es mit meinem Flash-Spiel funktioniert, muss das Internet Explorer-Fenster   aktiv sein. Ist das etwas, das Flash benötigt, oder gibt es etwas Zusätzliches, das ich tun könnte, damit es funktioniert, wenn das Spiel minimiert wird?

Dies muss nicht mit den AutoIt-Importen geschehen. Ich versuchte SendMessage von Benutzer32 an einem Punkt auch, aber das funktionierte überhaupt nicht für Flash Inhalt für mich.

ich das gerade getestet auf einer zufällige Webseite statt einer Flash-Website oder Sweeper und aus irgendeinem Grunde der Code funktioniert, wenn ich es aus dem Autoit Scripting-Programm ausführen, aber nicht von meinem C# Programm ...

20. Juni 2012: Ich bin ziemlich sicher, dass dies etwas mit der Art und Weise zu tun hat, wie der Griff passiert wird. Ich habe einige Tests mit dem Aufruf einer AutoIt-EXE-Datei durchgeführt und benutze das Handle, das ich aus dem C# -Code als Argument erhalte, ich muss dazu 0x hinzufügen, und dann muss ich es innerhalb des AutoIt-Codes aus einer Zeichenkette umwandeln zu einem HWnd, also könnte das etwas sein, in welchem ​​Fall ich nicht weiß, was zu tun ist, da die importierte Funktion auf einer Zeichenketteneingabe für das Handle beruht.

+0

Wie haben Sie Autoit-Funktionen in C# exportiert? Ich bin nur Neugierig. –

+0

http://www.lancelarsen.com/Blog/tabid/72/EntryId/48/AutoIt-C-Helper-Library.aspx Theres eine Website mit Ressourcen, wo jemand eine Klasse, die Funktionen aus der DLL-Bibliothek importiert gemacht hat. Aber ich denke, wenn Sie nur die Bibliothek einschließen, müssen Sie nicht unbedingt die Klasse verwenden, die er erstellt hat. Ich sage das, weil seine Helferklasse nicht alle Funktionen als Import enthält, Sie aber trotzdem auf alle Autoit-Methoden zugreifen können. –

Antwort

3

Etwas, das Sie versuchen sollten, Fensterhandle und Variablenhandhabungsprobleme auszuschließen. Es sollte nicht notwendig sein, WinGetTitle zu verwenden. Der Fenstertitel "Minesweeper" sollte funktionieren. Laut meinem AutoIt v3 Window Info-Tool in Windows 7 sind Minesweeper sowohl der Titel als auch die Klasse des Minesweeper-Fensters. So harte Kodierung

auto.ControlClick ("[TITEL: Sweeper; KLASSE: Sweeper], "", "", "links", 2, * r 10, r * 10);

funktionieren könnte. für mehr auf, wie die Erweiterte Fensterbeschreibungen in der AutoIt Hilfedatei funktioniert. Wenn dies immer noch nicht funktioniert Look ist WinTitleMatchMode in der Hilfe-Datei. Es Sie einige Regeln aufzustellen erlaubt Millennium in Fenstertitel, die das für Sie einfacher machen könnten

AutoIt X ist AutoIts DLL/COM-Steuerungsversion. So können Sie AuotIt zu jeder Sprache hinzufügen, die über DLL/COM-Unterstützung verfügt. Für den Fall, dass jemand anderes sich fragte how you would use AutoIt in C#. Leider bleibt AutoIt X oft in der Entwicklung und im Testen der Hauptsprache zurück. Sie haben zwar keinen Grund zu der Annahme, dass Ihr Problem durch einen Fehler verursacht wird, der lediglich einige Hintergrundinformationen zum AutoItX-Projekt liefert. Wenn Sie dies nicht bereits getan haben, sollten Sie eine Kopie dieser Frage an das ActiveX/COM Help and Support (AutoItX) Forum senden. Eines der besten Dinge über AutoIt in meiner Erfahrung im Laufe der Jahre ist die Gemeinschaft (die sich nicht viel bewegt hat). Dieser spezielle Forenbereich wird von einigen Entwicklern der Sprache besucht, die gerne helfen würden.

Wie zu Ihrem 20. Juni Hinweis behandelt AutoIt alle Variablen wie Zeichenfolgen, bis es erkennt, dass es etwas Besonderes ist. Es weiß nicht, dass ein Wert Hex ist, es sei denn, es beginnt mit der 0x, die du erwähnt hast. Das hat mir in der Vergangenheit alle möglichen seltsamen Probleme verursacht. Ich musste bei mehreren Gelegenheiten Null zu einer Variablen hinzufügen, um AutoIt zu bekommen, um es danach richtig auszuwerten. Dies ist bei AutoIt3 nicht oft der Fall, aber es ist nur etwas zu beachten.

Wenn Sie AutoIt Referenzcode viele Mitglieder des AutoIt forum have made Minesweeper bots benötigen, können Sie überprüfen und möglicherweise etwas hilfreich sehen.

+0

danke ich werde auf jeden Fall in diese Ressourcen schauen Ich war nur mit Minesweeper zu lernen, und dies löst immer noch nicht mein Problem mit dem Flash-Spiel. Aber ich werde etwas mehr Bastelei tun mit dem, was du mir gezeigt hast –

+0

gut Zeit ist nur über, also gebe ich Ihnen die Prämie, obwohl ich nicht ganz zufrieden bin Ich hatte gehofft, um herauszufinden, wie auf ein klicken Webbrowser, ich könnte es bereits in Minesweeper tun, wie ich erklärte Aber Ihr war das beste der verfügbaren Antworten, danke –

1

Stellen Sie sicher, dass Sie Ihr C# -Programm als Administrator ausführen. Dies ist der einzige Unterschied, den ich für eine Methode sehen kann, die funktioniert und die andere nicht.

Verwandte Themen