You are not logged in.

wcf.regNote.message

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

1

Sunday, March 5th 2006, 3:07am

VB Maus simulieren

Ich muss ein Programm schreiben, dass zwei Schachprogramme (die auf dem selben PC unter WinXP laufen) gegeneinander spielen lassen kann.

Dazu muss es erkennen, welche Züge gemacht werden und diese nachsetzen können. Die Größe und Position der Schachbretter kann ich gleichsetzen.

Das größte Problem ist das herausfinden der Züge und das Nachsetzen. Vom Schachprogrammentwickler wurde dazu keine Schnittstelle eingebaut.

Habt ihr ne Idee wie man daran geht, oder geht das schlichtweg nicht?

amoxys

Beginner

Posts: 8

  • Send private message

2

Sunday, March 5th 2006, 6:26am

Also zuersteinmal muss man herausfinden, welcher Zug gemacht wurde. Wie man an diese Information kommen kann, ist natürlich von Schachprogramm zu Schachprogramm unterschiedlich. Im schlimmten Falle muss man Screenshots vom Brett machen und analysieren. In den meisten Programmen werden die Züge aber auch in Textform angezeigt. Dann kann man entweder die grafische Ausgabe des Textes analysieren, oder versuchen den Text aus dem Speicher des Programmes zu lesen. Im besten Fall schreibt das Program Logfiles.

Wenn man den Zug kennt, kann man ihn in den meisten Fällen mit der Windows-Api in das andere Programm übertragen.
Tipp 0156: Mausbewegungen und Mausklicks simulieren
mfg
amoxys

This post has been edited 2 times, last edit by "amoxys" (Mar 5th 2006, 6:32am)


logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

3

Sunday, March 5th 2006, 4:57pm

Klingt schon mal gut. In beiden Programmen werden die Züge auch als Text ausgegeben.

Die Maus zu simulieren ist nicht so das Problem, sondern den richtigen Zug zu setzen.

amoxys

Beginner

Posts: 8

  • Send private message

4

Sunday, March 5th 2006, 5:12pm

Quoted

Original von logix
Klingt schon mal gut. In beiden Programmen werden die Züge auch als Text ausgegeben.

Gut.. Dann musst du mal nachsehen, ob man auf den Text einfach zugreifen kann. Wäre wunderbar, wenn der Text irgendwo in einem standard Textfeld stehen würde. Dann kann man ihn nämlich einfach mit GetWindowText auslesen, nachdem man dessen hWnd herausgefunden hat.

Quoted

Original von logix
Die Maus zu simulieren ist nicht so das Problem, sondern den richtigen Zug zu setzen.

Ich weiss ja nicht, wie kompliziert die Steuerung ist. Notfalls kann man die Positionen der Felder auch manuell ermitteln. Es wäre vorteilhaft, wenn man das Brett aus der Vogelperspektive sieht.
mfg
amoxys

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

5

Sunday, March 5th 2006, 11:22pm

Quoted

Original von amoxys

Quoted

Original von logix
Klingt schon mal gut. In beiden Programmen werden die Züge auch als Text ausgegeben.

Gut.. Dann musst du mal nachsehen, ob man auf den Text einfach zugreifen kann. Wäre wunderbar, wenn der Text irgendwo in einem standard Textfeld stehen würde. Dann kann man ihn nämlich einfach mit GetWindowText auslesen, nachdem man dessen hWnd herausgefunden hat.

Quoted

Original von logix
Die Maus zu simulieren ist nicht so das Problem, sondern den richtigen Zug zu setzen.

Ich weiss ja nicht, wie kompliziert die Steuerung ist. Notfalls kann man die Positionen der Felder auch manuell ermitteln. Es wäre vorteilhaft, wenn man das Brett aus der Vogelperspektive sieht.


Ich weiß leider nicht, - wenn vorhanden - wie man die hWnd herausfindet. Ich arbeitete noch nicht so lange mit VB.

Ja, beide Bretter sieht man aus der Vogelperspektive und die Felder haben die gleiche Position und Größe.

amoxys

Beginner

Posts: 8

  • Send private message

6

Monday, March 6th 2006, 11:06am

Um herauszufinden, ob man überhaupt auf das Control zugreifen kann, verwende ich meistens den Spy++. Der ist oft bei VB dabei. Hast du den? Ansonsten findest du z.B. bei PSC Ersatz. Da ist dann auch der ganze Sourcecode dabei den du brauchst, um den Text auszulesen.
mfg
amoxys

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

7

Saturday, March 25th 2006, 5:56pm

also sorry, dass ich mich solange nicht mehr gemeldet hab. aber ich bin damit bis jetzt noch nicht ganz fertig geworden, und brauche erstmal noch ein bisschen zeit. aber die ideen (<- plural so richtig :D ?( ) von dir amoxys sind schon mal klasse. sobald ich etwas funktionsfähiges hinbekommen hab, setzte ich hier mal den source rein, mal sehn, vielleicht kann man daran dann noch einiges verbessern. :)

so far.

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

8

Wednesday, September 20th 2006, 10:25pm

RE: VB Maus simulieren

Quoted

Original von logix
Ich muss ein Programm schreiben, dass zwei Schachprogramme (die auf dem selben PC unter WinXP laufen) gegeneinander spielen lassen kann.

Dazu muss es erkennen, welche Züge gemacht werden und diese nachsetzen können. Die Größe und Position der Schachbretter kann ich gleichsetzen.

Das größte Problem ist das herausfinden der Züge und das Nachsetzen. Vom Schachprogrammentwickler wurde dazu keine Schnittstelle eingebaut.

Habt ihr ne Idee wie man daran geht, oder geht das schlichtweg nicht?


Ich bin damit bis jetzt noch nicht weiter gekommen und hab auch noch keinen Ansatz gefunden :(

Wenn ich die Position der Veränderung der Schachoberfläche herausfinden könnte, wenn ein Zug gemacht wird, dann könnte ich ja den nächsten Zug berechnen, und dann mit der Maus im anderem Schachprogramm diesen Zug nachziehen lassen. Ich weiß allerdings nicht ob man ne Veränderung der Windows Oberfläche (sag ich jetzt mal), abfangen kann bzw. Koordinaten von den Teilbereichen, die nur verändert wurden (der Schachzug an sich), herausfinden kann. Hab mir auch überlegt, ich könnte eventuell ne Art Mausadapter einbauen, dass würde aber auch nicht funktionieren, weil der ja nur Aktionen der Maus abfangen würde und nicht ne Veränderung im Schachfenster.

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

9

Sunday, October 8th 2006, 10:35am

Quoted

Original von amoxysIn den meisten Programmen werden die Züge aber auch in Textform angezeigt. Dann kann man entweder die grafische Ausgabe des Textes analysieren, oder versuchen den Text aus dem Speicher des Programmes zu lesen.


Ja, die Züge werden als Text auch angezeigt.

Wie komme ich an den Text ran? Aus dem Speicher selbst zu lesen ist sicher zu aufwendig...

amoxys

Beginner

Posts: 8

  • Send private message

10

Sunday, October 8th 2006, 11:08pm

Quoted

Original von logix
Wie komme ich an den Text ran? Aus dem Speicher selbst zu lesen ist sicher zu aufwendig...


Es kann sein, dass man den Text mit der Windows-API auslesen kann. Dazu bräuchte man nur den Handle des Textfenster. Den bekommt man mit FindWindow bzw. FindWindowEx. Wenn man den hat, kommt man mit GetWindowTextLengthA und GetWindowTextA an den Text. So ist es jedenfalls bei ganz standardmässigen Textboxen. Die Funktionen stellt die User32.dll bereit.
mfg
amoxys

wcf.user.socialbookmarks.titel