Global $WinName = "PixelSearch"
Opt("PixelCoordMode", 2) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 2) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
Opt("MustDeclareVars", 1) ;Форсируем задачу переменных. Тоесть после задания этой опции перед тем как нам использовать какую-либо переменную нам надо обозначить ее.
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("^{PAUSE}", "_Exit")
Global $Paused
Sleep(1000)
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFunc
Func _Exit()
MsgBox(0,"","Выход")
Exit
EndFunc
WinActivate($WinName)
WinWaitActive($WinName)
;~ opt("SendKeyDownDelay", 150)
;~ While 1WinActive($WinName)
;~ WinActivate($WinName)
;~ WinWaitActive($WinName)
;~ local $pos = MouseGetPos()
;~ MouseDown("Right")
;~ MouseMove($pos[0]+30, $pos[1], 100)
;~ MouseUp("Right")
;~ MouseClickDrag("left", $pos[0], $pos[1], $pos[0]+10, $pos[1], 100)
;~ Exit
While 1
DefineArea()
WEnd
;~ WEnd
Func SearchTarget($x1, $y1, $x2, $y2)
Local $var
For $x = $x1 to $x2 Step 10
For $y = $y1 To $y2 step 10
MouseMove($x, $y, 0)
Sleep(20)
$var = PixelSearch(10, 85, 822, 551, 0xcecbc6)
If Not @error Then
;~ PixelSearch($var[0]+1, $var[1], $var[0]+1, $var[1], 0xcecbc6)
;~ if not @error Then
;~ Exit
GetTarget($x, $y)
ExitLoop(2)
;~ EndIf
EndIf
Next
Next
MouseDown("Right")
MouseMove($x-5, $y, 300)
Sleep(500)
MouseUp("Right")
;~ Send("{LEFT DOWN}")
;~ Sleep(1500)
;~ Send("{Left UP}")
EndFunc
Func GetTarget($x ,$y)
;~ MsgBox(0,"","")
For $i = $y To $y-30 Step -1
MouseMove($x, $i, 10)
PixelSearch(10, 85, 822, 551, 0xcecbc6)
if @error Then
Sleep(1000)
MouseDown("Right")
MouseMove($i-5, $y, 300)
Sleep(500)
MouseUp("Right")
;~ Send("{LEFT DOWN}")
;~ Sleep(1500)
;~ Send("{Left UP}")
;~ MouseClickDrag("RIGHT", $i, $y, $i+20, $y, 100)
Return
Else
ExitLoop
EndIf
Next
MouseClick("left", $x, $i, 1, 0)
Sleep(1000)
Do
PixelSearch(453, 30, 453, 30, 0xAB3022, 5)
if Not @error Then Kill()
Until @error
;~ PixelSearch(10, 85, 822, 551, 0xcecbc6)
EndFunc
Func Kill()
Local $exitloop = 0
Do
Do
Send("{F1}")
PixelSearch(453, 30, 453, 30, 0xAB3022, 5)
Until @error
Send("{ESC}")
Mouseclick("right")
For $i = 1 To 10 step 1
Send("{F4}")
Sleep(100)
Next
For $i = 1 To 5 step 1
PixelSearch(453, 30, 453, 30, 0xAB3022, 5)
If Not @error Then
ExitLoop
Else
$exitloop = 1
EndIf
Sleep(250)
Next
Until $exitloop = 1
Sleep(100)
Send("{F2}")
Sleep(500)
PixelSearch(453, 30, 453, 30, 0xAB3022, 5)
If Not @error Then
Kill()
EndIf
EndFunc
Func DefineArea()
Local $col = PixelSearch(10, 85, 822, 551, 0xFCFCFC)
If Not @error Then
Local Const $x1 = $col[0], $y1 = $col[1], $x2 = $col[0]+50, $y2 = $col[1]+50
;~ For $ix = $x1 To $x2 Step 5
;~ MouseMove($ix, $y1, 10)
;~ Next
;~ For $iy = $y1 To $y2 Step 5
;~ MouseMove($x2, $iy, 10)
;~ Next
;~ For $ix = $x2 To $x1 Step -5
;~ MouseMove($ix, $y2, 10)
;~ Next
;~ For $iy = $y2 To $y1 Step -5
;~ MouseMove($x1, $iy, 10)
;~ Next
SearchTarget($x1, $y1, $x2, $y2)
Else
local $pos = MouseGetPos()
MouseDown("Right")
MouseMove($pos[0]-5, $pos[1], 300)
Sleep(500)
MouseUp("Right")
EndIf
EndFunc
; #FUNCTION# ;===============================================================================
;
; Name...........: PixelSearchEx
; Description ...: Ищит в заданной области поиска пиксели которые по мимо цвета соответствуют еще и задаваемым в отдельной функции условиям.
; Syntax.........: PixelSearchEx($x1, $y1, $x2, $y2, $col, $shade, $Case, $step, $hwnd)
; Parameters ....: $x1, $y1 - Координаты левого верхнего угла области поиска.
; $x2, $y2 - Координаты правого верхнего угла области поиска.
; $col - Цвет пикселя который мы будем искать в формате 0x000000.
; $shade - [опционально] Число от 0 до 255 отражающее варианты красного, зеленого и голубого оттенков цвета. По умолчанию 0 (точное совпадение).
; $Case - [опционально] Номер условия которое будет обработано после нахождения подходящего по цвету пикселя. По умолчанию 0 (не обрабатываем доп условия).
; $step - [опционально] Вместо того чтобы сканировать все пиксели подряд, можно использовать числа от 2 и выше чтобы задать шаг сканирования (для того чотбы ускорить процесс). К примеру задав 2, будет проверяться каждый второй пиксель. По умолчанию 1.
; $hwnd - [опционально] Заголовок окна которое должно будет использоваться командой.
; Return values .: Success - Возвращает одномерный массив содержащий координаты найденного пикселя. (Array[0] = x, Array[1] = y).
; Failure - Возвращает 0 и присваивает @error одно из следующих значений:
; @error = 1 : Если в области сканирования небыло найдено ниодного пикселя подходящего под заданные условия.
; @error = 2 : Если была попытка обратиться к не существующему условию.
; Author ........: Belfigor
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........; http://autoit-script.ru/index.php/topic,182.0.html
; Example .......; Ога
;
; ;==========================================================================================
Func PixelSearchEx($x1, $y1, $x2, $y2, $col, $shade=0, $Case = 0, $step=1, $hwnd=0)
Local Const $Con[8] = [$x1, $y1, $x2, $y2, "0x"&Hex($col, 6), $shade, $step, $hwnd]
While 1
Local $Check = PixelSearch($x1, $y1, $x2, $y2, $Con[4], $Con[5], $Con[6], $Con[7])
If Not @error Then
If CheckPixel($Check, $Case) Then
Return $Check
Else
If @error Then
SetError(2)
Return 0
Else
$x1 = $Check[0]+1
$y1 = $Check[1]
$y2 = $Check[1]
EndIf
EndIf
Else
If $y2 < $Con[3] Then
$x1 = $Con[0]
$x2 = $Con[2]
$y2 = $Con[3]
$y1 = $y1+1
Else
SetError(1)
Return 0
EndIf
EndIf
WEnd
EndFunc ;==> PixelSearchEx
; #FUNCTION# ;===============================================================================
;
; Name...........: CheckPixel
; Description ...: Хранит в себе различные задаваемые пользователем условия проверок пикселей. Обрабатывает пиксель по полученным из PixelSearchEx координатам на предмет соответствия полученному из PixelSearchEx условию
; Syntax.........: CheckPixel($Check, $Case)
; Parameters ....: $Check - Массив содержащий в себе X и Y координаты пикселя который необходимо проверить. ($Check[0] = x, $Check[1] = y).
; $Case - Номер условия которое будет использовано при обработке пикселя.
; Return values .: Success - Возвращает True
; Failure - Возвращает False
; @error = 1 : В случае попытки обратиться к незаданному условию.
; Author ........: Belfigor
; Modified.......:
; Remarks .......: Приведенные в CheckPixel условия - является лишь примером. Все условия проверок вам придется прописывать своими руками.
; В прочем ничего не мешает вам использовать за основу уже имеющийся вариант CheckPixel.
; Так же ничего вам не мешает написать свою уникальную функцию, единственное условие которое от нее требуется это возврат True or False в PixelSearchEx
; В случае использования 0 как условия проверки, функция тут же вернут True а сам PixelSearchEx сработает как стандартный PixelSearch.
; То что в данном случае в условиях использованы только PixelSearch - не является ограничением функции. Условия можно дописывать какие угодно. На сколько хватит фантазии.
; Related .......:
; Link ..........; http://autoit-script.ru/index.php/topic,182.0.html
; Example .......; Ога
;
; ;==========================================================================================
Func CheckPixel($Check, $Case)
Select
Case $Case = 0
Return True
Case $Case = 1
PixelSearch($Check[0]+3, $Check[1]+3, $Check[0]+3, $Check[1]+3, 0x00E125, 5)
If Not @error Then Return True
Case $Case = 2
PixelSearch($Check[0]-2, $Check[1]+5, $Check[0]-2, $Check[1]+5, 0x00E125, 5)
If Not @error Then PixelSearch($Check[0]-4, $Check[1]+2, $Check[0]-4, $Check[1]+2, 0x00E125, 5)
If Not @error Then Return True
Case $Case = 3
PixelSearch($Check[0]+7, $Check[1]+3, $Check[0]+7, $Check[1]+3, 0x00E125, 5)
If Not @error Then PixelSearch($Check[0]+3, $Check[1]+7, $Check[0]+3, $Check[1]+7, 0x00E125, 5)
If Not @error Then PixelSearch($Check[0]+9, $Check[1]+5, $Check[0]+9, $Check[1]+5, 0x00E125, 5)
If Not @error Then Return True
Case $Case = "Синий кружок"
MsgBox(0,'','!!!')
Return True
Case Else
SetError(1)
Return False
EndSelect
Return False
EndFunc ;==> CheckPixel