День добрый!
Подскажите пожалуйста, есть функция поиска точки в неактивном окне. Она работает, но очень долго (порядка 30 секунд)... Вот собственно вопрос, можно ли как-нибудь улучшить код и поднять производительность данной функции (хотя бы до 5-10 секунд). Код:
Прошу сильно за код не пинать, перешел на AutoIt с AHK и пока еще не привык к нему полностью.
P.S. И заодно в довесок вопрос: немного не понял как поместить возврат функции в массив...Если есть знающие люди, которые помогут, буду очень признателен.
Подскажите пожалуйста, есть функция поиска точки в неактивном окне. Она работает, но очень долго (порядка 30 секунд)... Вот собственно вопрос, можно ли как-нибудь улучшить код и поднять производительность данной функции (хотя бы до 5-10 секунд). Код:
Код:
#include <WinAPIEx.au3>
#include <WinAPI.au3>
$hWnd = WinGetHandle("Territory "); заголовок окна для поиска
MsgBox(0,'',_FindPixInAct(0xF3BC4D,$hWnd)); вызов функции
Func _FindPixInAct ($iColor, $hWnd)
Local $hDDC, $hCDC, $hBMP
$iWidth = _WinAPI_GetWindowWidth($hWnd)
$iHeight = _WinAPI_GetWindowHeight($hWnd)
$hDDC = _WinAPI_GetDC($hWnd)
$hCDC = _WinAPI_CreateCompatibleDC($hDDC)
$hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iWidth, $iHeight)
_WinAPI_SelectObject($hCDC, $hBMP)
DllCall("User32.dll", "int", "PrintWindow", "hwnd", $hWnd, "hwnd", $hCDC, "int", 0)
; задаем начальные данные для поиска
$iX = 0
$iY = 0
; начало цикла поиска
While 1
$sPixel = _WinAPI_GetPixel($hCDC, $iX, $iY)
if ($sPixel = $iColor) Then
MsgBox(0,'','Find')
ExitLoop
EndIf
if ($iX > $iWidth) Then
$iX = 0
$iY += 1
EndIf
if ($iY > $iHeight) Then
MsgBox(0,'','Not Find')
$iX = -1
$iY = -1
ExitLoop
EndIf
$iX += 1
WEnd
; конец цикла поиска
_WinAPI_ReleaseDC($hWnd, $hDDC)
_WinAPI_DeleteDC($hCDC)
Return ($iX&' '&$iY)
EndFunc ;=>_FindPixInAct
Прошу сильно за код не пинать, перешел на AutoIt с AHK и пока еще не привык к нему полностью.
P.S. И заодно в довесок вопрос: немного не понял как поместить возврат функции в массив...Если есть знающие люди, которые помогут, буду очень признателен.