Что нового

Не работает скрипт, который ищет пиксел

Art4D

Новичок
Сообщения
22
Репутация
3
Брал из этой темы:
http://autoit-script.ru/index.php?topic=14905.15

Функция всегда возвращает true хотя пиксела нету, где ошибка?
Код:
#include <Array.au3>
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>

AutoItSetOption("PixelCoordMode", 2)
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")

While 1
$hWnd = WinGetHandle("GTA:SA:MP")
$test = _PixelGetArray(275,221,354,226,0xFFFFFF,0,$hWnd)
If IsArray($test) = True Then
SoundPlay(@ScriptDir & "\Sound.mp3", 1)
EndIf
WEnd

Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Скрипт приостановлен')
    WEnd
    ToolTip("")
EndFunc


Func _PixelGetArray($iX, $iY, $iWidth, $iHeight, $iColor, $hWnd, $FirstOnly = True)
  Local $aPixels[$iWidth * $iHeight + 1][2]
  Local $hDC = _WinAPI_GetDC($hWnd)
  Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
  Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
  _WinAPI_SelectObject($hMemDC, $hBitmap)
  _WinAPI_BitBlt($hMemDC, 0, 0, $iWidth, $iHeight, $hDC, $iX, $iY, $SRCCOPY)
  _WinAPI_DeleteDC($hMemDC)
  _WinAPI_ReleaseDC($hWnd, $hDC)
  Local $iSize = $iWidth * $iHeight
  Local $tBits = DllStructCreate("dword[" & $iSize & "]")
  _WinAPI_GetBitmapBits($hBitmap, 4 * $iSize, DllStructGetPtr($tBits))
  Local $iCount = 0
  For $i = 1 To $iSize
    If BitAND(DllStructGetData($tBits, 1, $i), 0x00FFFFFF) = $iColor Then
      $iCount += 1
      $aPixels[$iCount][0] = Mod($i, $iWidth) - 1
      If $aPixels[$iCount][0] = -1 Then $aPixels[$iCount][0] = $iWidth - 1
      $aPixels[$iCount][1] = Ceiling($i / $iWidth) - 1
      If $FirstOnly Then ExitLoop
    EndIf
  Next
  ReDim $aPixels[$iCount + 1][2]
  $aPixels[0][0] = $iCount
  For $i = 1 To UBound($aPixels) - 1
    $aPixels[$i][0] += $iX
    $aPixels[$i][1] += $iY
  Next
  Return $aPixels
EndFunc   ;==>_PixelGetArray
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Во-первых, у вас неправильно указаны параметры (0 и $hWnd нужно поменять местами).
Во-вторых, данная функция всегда вернёт массив, даже когда ничего не найдено. Проверять нужно так
Код:
If IsArray($test) And $test[0][0] Then
 
Автор
A

Art4D

Новичок
Сообщения
22
Репутация
3
InnI сказал(а):
Во-первых, у вас неправильно указаны параметры (0 и $hWnd нужно поменять местами).

А почему менять местами? 0 разве не за $iColor отвечает?
 

Anna

Новичок
Сообщения
119
Репутация
2
Извините, была уверена что спрашиваю здесь http://autoit-script.ru/index.php?topic=20608.0
Перенесла вопрос.
 
Верх