#Region ************ Includes ************
#include <FastFind.au3> ; подключаем необходимые программе библиотеки
#include <GUIConstantsEx.au3>
#EndRegion ************ Includes ************
;--------------------------------------------------------------------------------------
Opt("MouseCoordMode", 2) ; Устанавливает способ отсчёта координат используемый в функциях мыши
Opt("PixelCoordMode", 2) ;Устанавливает способ отсчёта координат используемый в Pixel-функциях.
Opt("SendKeyDownDelay", 100) ;Изменяет продолжительность нажатого состояния клавиши, перед тем как отпустить
Opt("MouseClickDownDelay", 100) ; Изменяет продолжительность нажатой кнопки мыши, прежде чем отпустить.
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Быстрый поиск", 670, 419, 192, 124)
$PicTest = GUICtrlCreatePic(@ScriptDir & "\test.bmp", 8, 8, 452, 404) ;Подгружаем картинку в гуи из папки со скриптом
$ButtonPoisk = GUICtrlCreateButton("Поиск цвета", 472, 104, 171, 25)
$LabelCoord = GUICtrlCreateLabel("Координаты", 472, 144, 194, 17)
$LabelTime = GUICtrlCreateLabel("Время поиска", 472, 208, 196, 17)
$Input_color = GUICtrlCreateInput("", 480, 64, 161, 21)
GUICtrlSetTip(-1, "Введите цвет в шестнадцатеричном 0xFF0000 или десятичном 16711680 формате ") ;Всплывающая подсказка
$LabelKol = GUICtrlCreateLabel("Количество найденных пикселей", 472, 176, 196, 17)
$ChecMous = GUICtrlCreateCheckbox("Показать курсором мыши", 480, 24, 161, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
HotKeySet("{ESC}", "End") ;Горячая клавиша - остановить поиск
Global $hwnd = WinGetHandle("Быстрый поиск") ; окно в котором ищем
Global $color
WinSetState($hwnd, "",@SW_RESTORE) ; развернуть если свернуто
FFsetWnd($hwnd) ;Указываем какое окно будем считывать
FFSnapShot(0, 0, 0, 0, 0, $hwnd) ; скрин
Func FindSpot() ; функция которая ищет пиксель(и) указанного цвета
$Timer = @MSEC ; засекаем время
WinActivate($hwnd) ; Активирует указанное окно (передаёт ему фокус). В нашем случае - наша программа
$aCoords = FFNearestSpot(10 , 10, 254, 382, $color, 0 ,False,0,146,459,411) ;ищет пиксели и заносит найденные в архив $aCoords
If Not @error Then ; если нет ошибки то.......
$Timer1 = @MSEC ; смотрим время по окончании поиска
GUICtrlSetData($LabelTime, $Timer1 - $Timer&" ms") ; вычисляем разницу - выводим время затраченное на поиск
GUICtrlSetData($LabelCoord, "X-"&$aCoords[0]&" Y-"&$aCoords[1]) ; А так же координаты найденного
GUICtrlSetData($LabelKol, $aCoords[2] ) ; пишем сколько нашли пикселей
If GUICtrlRead($ChecMous) == $GUI_CHECKED Then ; если чекбокс "Показать курсором мыши" отмечен
MouseMove($aCoords[0], $aCoords[1], 5) ; Ставим курсор мыши на найденный пиксель
EndIf
Else ; в противном случае
GUICtrlSetData($LabelKol, "Ничего не нашли." ) ; пишем что не нашли
EndIf ; закончили
EndFunc
Func End() ; функция для остановки и выхода
Exit
EndFunc
While 1 ; Цикл управления окном программы
$nMsg = GUIGetMsg() ; Опрос GUI-окна на возникновение какого либо события.
$color = GUICtrlRead($Input_color) ;Возвращает текст из поля ввода цвета
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $ButtonPoisk ; Нажали клавишу поиска
FindSpot() ; Запустилась наша функция
EndSwitch
WEnd