Что нового

[Автоматизация] Сравнение изображений и клики в отличные места

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Версия AutoIt: 3.3.6.1

Описание: Думаю всем в какой-то степени знакома игра "Найди Отличия", мне необходимо реализовать автоматическое нахождение отличий.
Итак: окно браузера, в нём запущенно приложение http://vkontakte.ru/app1919463, в нём нарисованы две одинаковые картинки(Пара картинок разумеется каждый раз меняется), нужно сравнить эти картинки и там где имеются различия совершить щелчок левой клавишей мыши.

Примечания: Вот картинка, чтобы было понятнее(=
П.С. Если можно то долейте побольше разъясняющих комментариев, а то мне эта функция много где понадобится...
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Это хотябы возможно?)
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Как минимум сравнить по пиксельно PixelGetColor. А для ускорения PixelChecksum.
Ну и разницу выделить.
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Спасибо, знал что возможно(=
Идеи насчёт сравнения цвета пикселей были, но... хотя нужно будет попробовать, может и получится...
 
Автор
V

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Прошу перенести тему в раздел "Боты для игр".

Сделал далеко не то что хотел, сравнения никакого, тупо клики по точкам, а чтобы не глючило, приписал заморозку процесса:
Код:
#include <GUIConstants.au3>
HotKeySet('{F1}','start')
Opt("MouseCoordMode",2)
Global $start=0,$fSuspended = 0,$process='opera.exe'
GUICreate("ClickerBot",145,20)
$1=GUICtrlCreateCombo('opera.exe', 0, 0, 145, 25)
GUICtrlSetData(-1, "plugin-container.exe|chrome.exe|IExplore.exe")
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUISetState()

Func start()
	$process=GUICtrlRead($1)
	$start=1
EndFunc

While 1
	$msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
If $start=1 Then
	_ProcSuspendResume($process)
For $x=338 To 640 Step 20  ;640 on 935
	For $y=125 To 575 Step 20
	MouseClick('Left',$x,$y,1,0)
	Next
Next
_ProcSuspendResume($process)
MouseClick('Left',800,490,1,0)
$start=0
EndIf
Wend

Func _ProcSuspendResume($process)
    $processid = ProcessExists($process)
    If $processid Then
        If $fSuspended Then
            $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
            $i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle[0])
            DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
            If IsArray($i_sucess) Then
                $fSuspended = 0
                Return 1
            Else
                SetError(1)
                Return 0
            Endif
        Else
            $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
            $i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle[0])
            DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
            If IsArray($i_sucess) Then
                $fSuspended = 1
                Return 1
            Else
                SetError(1)
                Return 0
            Endif
        EndIf
    Else
        SetError(2)
        Return 0
    Endif
EndFunc
 
Верх