Для поиска картинки на экране я использую библиотеку <BmpSearch.au3>
Скачать
Вот функция для поиска растрового изображения в другом растровом изображении. Основой для него является написанная сборка (включая исходный код), и я думаю, что он работает довольно быстро. Я привожу пример, который является довольно простым и должен быть достаточно понятным для любого, чтобы понять концепцию.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#include <GUIConstantsEx.au3> #include <Constants.au3> #include <WindowsConstants.au3> #include <MsgBoxConstants.au3> #include <screencapture.au3> #include "bmpsearch.au3" Global $g_sFasm _Example() Func _Example() ;~ Local $hHighlight_Capture = GUICreate('', 40, 10, -1, -1, $WS_POPUPWINDOW, $WS_EX_CONTROLPARENT) Local $hHighlight_Capture = GUICreate('', 100, 50, -1, -1, $WS_POPUPWINDOW, $WS_EX_CONTROLPARENT) GUISetState(@SW_SHOW) WinSetOnTop($hHighlight_Capture, '', 1) GUISetBkColor(0x0000FF, $hHighlight_Capture) WinSetTrans($hHighlight_Capture, '', 150) Local $aPos = WinGetPos($hHighlight_Capture) WinMove($hHighlight_Capture, '', $aPos[0] - 100, $aPos[1] - 100) MsgBox($MB_TOPMOST, 'Capture Sample', 'Move the small blue window to a position over some window to capture, then press ok') $aPos = WinGetPos($hHighlight_Capture) GUIDelete($hHighlight_Capture) Sleep(500) ConsoleWrite($aPos[2] & ',' & $aPos[3] & ',' & $aPos[0] & ',' & $aPos[1] & @LF) Local $hFind = _ScreenCapture_Capture('', $aPos[0], $aPos[1], $aPos[0] + $aPos[2], $aPos[1] + $aPos[3]) MsgBox($MB_TOPMOST, 'Move Window', "Now move the window somewhere else, then press ok") Sleep(500) Local $hSource = _ScreenCapture_Capture('') Local $aCords = _BmpSearch($hSource, $hFind) If Not @error Then $iTime = @extended / 1000 If $aCords[0][0] > 100 Then ; thats quite a few gui's. Just show result _ArrayDisplay($aCords) Else ;highligh matches Local $aGUI[$aCords[0][0] + 1] For $i = 1 To $aCords[0][0] ConsoleWrite($aCords[$i][0] & ',' & $aCords[$i][1] & ',' & $aCords[$i][2] & ',' & $aCords[$i][3] & @LF) $aGUI[$i] = GUICreate("", $aCords[$i][0], $aCords[$i][1], $aCords[$i][2], $aCords[$i][3], $WS_POPUPWINDOW, $WS_EX_CONTROLPARENT) GUISetBkColor(0xFFFF00, $aGUI[$i]) WinSetTrans($aGUI[$i], '', 150) GUISetState(@SW_SHOW) Next MsgBox(0, 'Found', $aCords[0][0] & ' matches found. Time = ' & $iTime & ' ms') For $i = 1 To UBound($aGUI) - 1 GUIDelete($aGUI[$i]) Next EndIf Else MsgBox(0, 'NO MATCHES', 'No Matches Found!') EndIf _WinAPI_DeleteObject($hSource) _WinAPI_DeleteObject($hFind) EndFunc ;==>_Example |
Вам будет предоставлено маленькое синее окно, которое будет принимать скриншот такого размера:
Затем он сделает полный скриншот всего экрана и выделит все найденные им места
Оригинал этой библиотеки и пример скачивал отсюда — Оригинал