Minesweeper Bot

02/05/2014 18:32 Mc-Merlin#1
OK, für manche (oder alle) dürfte ein Minesweeper Bot wohl "witzlos" sein, aber ich amüsiere mich köstlich.

Mein Bot arbeitet bisher mit MouseMove und macht was er soll, doch ich will mehr :p

Ich versuche die Mausklicks zu tätigen ohne das die Maus sich Visuel auf dem Bildschirm bewegt.

Ich bin auf meiner Suche über zwei doch etwas ältere Ansätze zu dem Thema gestolperte, aber so ganz "fällt der Groschen noch nicht"

[Only registered and activated users can see links. Click Here To Register...][Only registered and activated users can see links. Click Here To Register...]

Testaufbau zum "Klicken"
PHP Code:
#AutoIt3Wrapper_UseX64=N ;32Bit System

Local $MinesweeperXY WinGetPos("Minesweeper")
$Fenster WinGetHandle("Minesweeper")

$X $MinesweeperXY[0] + 47  ;Ecke links oben X
$Y 
$MinesweeperXY[1] + 88  ;Ecke links oben Y

$LPARAM 
_MakeLong($X,$Y)

DllCall("Functions.dll","int","fnPostMessage","hwnd",$Fenster,"int",0x0201,"int",0x0001"long",$LPARAM)
        
Sleep (100)
DllCall("Functions.dll","int","fnPostMessage","hwnd",$Fenster,"int",0x0202,"int",0x0001"long",$LPARAM)


Func _MakeLong($LoWord,$HiWord)
Return 
BitOR($HiWord 0x10000BitAND($LoWord0xFFFF))
EndFunc 
02/05/2014 18:47 alpines#2
MouseClick ohne das sich die Maus bewegt? [Only registered and activated users can see links. Click Here To Register...]
02/05/2014 19:05 Mc-Merlin#3
Quote:
Originally Posted by alpines View Post
MouseClick ohne das sich die Maus bewegt? [Only registered and activated users can see links. Click Here To Register...]
Über diese Metode bin ich auch gestolpert, jedoch muss Minesweeper bei dieser Lösung genau wie beim MouseMove, aktive im Vordergrund sein.

Und wen man nebenbei etwas "google'n" will, nun dann geht eine Bombe hoch.

Entschuldige, dass ich mich diesbezüglich ungenau ausgedrückt habe.
02/05/2014 19:12 YatoDev#4
Quote:
Originally Posted by Mc-Merlin View Post
Über diese Metode bin ich auch gestolpert, jedoch muss Minesweeper bei dieser Lösung genau wie beim MouseMove, aktive im Vordergrund sein.
versteh ich das falsch ?

Hast du bei ControlClick die coordinaten vom fenster genommen und nicht desktop coords ? auf eine mine kannst du denke ich mal nicht im background prüfen
02/05/2014 19:54 Mc-Merlin#5
Quote:
versteh ich das falsch ?
Ja :D

Ich verwende zum Finden, und errechnen der Bomben PixelSearch.
(1Bombe = Blau, 2= Grün,3=Rot usw.)
Zum Bewegen der Maus und zum Klicken benutze ich bisher MouseMove & MouseClick.

PixelSearch Arbeite auch dann, wen das Fenster nicht Aktive ist (solange es sichtbar bleibt), wohingegen MouseMove, sagen wir mal "mist macht"

Ich will Minesweeper gar nicht in den Background schicken, sondern einfach auf einen anderen Monitor verschieben.

[Only registered and activated users can see links. Click Here To Register...]

Darum suche ich eine Möglichkeit, einen Mausklick zu "senden" ohne das mir die Maus "weggenommen" wird.
02/05/2014 20:30 YatoDev#6
Quote:
Originally Posted by Mc-Merlin View Post
...
ich glaube du verstehst mich falsch
02/05/2014 22:05 Mc-Merlin#7
Nicht mit Absicht :confused: Normalerweise lese ich in Foren nur und verkeife es mir was zu schreiben.

Du hattest gefragt ob ich ControlClick probiert hatte, das habe ich, auch mit den Coordinaten vom Fenster.
Leider reagiert Minesweeper nur auf Clicks, wen es Aktive ist.

Und bei den Minen hast du recht,PixelSearch kann die nur finden, wen sich das Fenster im Vordergrund befindet.
02/06/2014 01:30 YatoDev#8
schieb das fenster ausm bild raus :D - Desktop coords
02/06/2014 13:26 Mc-Merlin#9
Moin,
ich soll das Minesweeper Fenster über die Coordinaten des Desktops ansteuern.
Bei 6 Monitoren steuere ich Fenster normalerweise immer direkt an, da die selten an derselben Stelle liegen.

PHP Code:
HotKeySet("{ESC}""Terminate")

Opt("MouseClickDownDelay",50)
Opt("MouseClickDownDelay",50)

$Window WinGetTitle("Minesweeper")
$ScreenX "1591" Mitte des Minesweep Fenster im Monitor 5 Rechtes unten
$ScreenY 
"-273" Mitte des Minesweep Fenster im Monitor 5 Rechtes unten

While 1
       MinesweeperV2
()
WEnd


Func MinesweeperV2
()
    
Sleep (2000)
    
ControlClick """""","left",1,$ScreenX$ScreenY)
    
ConsoleWrite('MinesweeperV2 ' & @SEC&'sec' & @CRLF)
EndFunc


Func Terminate
()
Exit 
0
EndFunc 
Oder stehe ich immer noch auf dem Schlauch :(
02/06/2014 15:21 YatoDev#10
x und y corrds - diese werden von windows nicht angezeigt
02/06/2014 18:17 lolkop#11
Quote:
Originally Posted by Mc-Merlin View Post
[Only registered and activated users can see links. Click Here To Register...]
What the....
wieso habe ich kein derartiges system? :(

zum problem:
controlclick arbeitet genau wie postmessage mit relativen coordianten (relativ zum gewählen control). sobald du das in deinem script beachtest, sollte es keine probleme geben.
02/06/2014 20:20 alpines#12
lolkop eine Antwort auf die erste Frage habe ich. Ich hassen den Bildschirmrand den man bei mehreren bekommt und hier ist das sehr extrem. Bei 2 Monitoren finde ich das schon hässlich.