Что нового

PixelSearch неверно выдает координаты.

Leanna

Новичок
Сообщения
25
Репутация
3
Мне понадобилась программа, что бы смотреть уникальный ли это цветовой пиксель на экране или нет,
в итоге нашла некий код и модифицировала его под себя.

Код простой. Но во второй-третьей-четвертой попытке неверно выдаются координаты по PixelSearch.

Разница между этими "попытками" (а именно в GETPIX GETPIX2 GETPIX3 GETPIX4)
в том как расставлены координаты left, top, right, bottom у PixelSearch
Что так можно делать написано в справке:
PixelSearch ( left, top, right, bottom, color [, shade-variation [, step [, hwnd]]] )

Remarks
The search direction varies as follows:
Left-to-Right - left < right
Right-to-Left - right < left
Top-to-Bottom - top < bottom
Bottom-to-Top - bottom < top

Вы могли бы подсказать, что не так?
Т.е. hex задается тот же, а выдаются координаты на которых вообще другой цветовой hex.
Почему?

Объяснения по скрипту закомментила, что бы проще было понять.
Код:
global $hex

GETPIX()

; функция GETPIX() берет значение из буфера обмен, если это похоже на HEX то подставляет в форму InputBox
; в Inputbox указываем нужный Hex
; PixelSearch ищем координаты нужного цветового пикселя
;~ если находит пиксель то  наводим на эту точку указатель мыши
;~ выдаем сообщение на каких координатах найдено, какой hex 
;~ и спрашиваем Завершить или нет
;~ надо НЕ завершать, продолжить далее, что бы выполнить следующую процедуру GETPIX2() и т.д.
;~ GETPIX2() будет искать тот же hex, только с другого угла будет производить поиск

func GETPIX()
$clip = ClipGet()
If StringLen($clip) = 6 then $hex = $clip

$hex = inputbox("Введиде HEX:", "HEX код цвета 6 знаков", $hex)

If StringLen($hex) = 6 then
$px = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, "0x" & $hex)
   IF NOT @ERROR THEN
	  MouseMove($px[0], $px[1])
	  $txt = StringRight(Hex(PixelGetColor($px[0], $px[1])), 6)
   	  $px11 = $px[0] ;эти данные берутся, что бы потом сравнить все четыре попытки и сделать диагноз на уникальность цветового пикселя
	  $px21 = $px[1]
	  $msg = MsgBox(4, "Найден #1# "  & $px[0] & ", " & $px[1], $hex & " = " & $txt & @LF & "Продолжить?"  )
	  if $msg = 6 then  GETPIX2()
   Else
	  MsgBox(0, "Не найден", $hex)
   EndIf
   
Else
   MsgBox(0, "", "Выход", $hex)
Endif

EndFunc

;дальше идут три однотипные функции, аналогичные первой функции GETPIX
;разница только в  строке PixelSearch(@DesktopWidth, 0, 0, @DesktopHeight, "0x" & $hex)
;согласно справке если по другому задать координаты то с другого угла начнется поиск
func GETPIX2()
$px = PixelSearch(@DesktopWidth, 0, 0, @DesktopHeight, "0x" & $hex)
   IF NOT @ERROR THEN
	  MouseMove($px[0], $px[1])
	  $txt = StringRight(Hex(PixelGetColor($px[0], $px[1])), 6)
   	  $px12 = $px[0]
	  $px22 = $px[1]
	  $msg = MsgBox(4, "Найден #2# "  & $px[0] & ", " & $px[1], $hex & " = " & $txt & @LF & "Продолжить?"  )
	  if $msg = 6 then  GETPIX3()
   Else
	  MsgBox(0, "Не найден", $hex)
   EndIf
EndFunc

func GETPIX3()
$px = PixelSearch(@DesktopWidth, @DesktopHeight, 0, 0, "0x" & $hex)
   IF NOT @ERROR THEN
	  MouseMove($px[0], $px[1])
	  $txt = StringRight(Hex(PixelGetColor($px[0], $px[1])), 6)
   	  $px13 = $px[0]
	  $px23 = $px[1]
	  $msg = MsgBox(4, "Найден #3# "  & $px[0] & ", " & $px[1], $hex & " = " & $txt & @LF & "Продолжить?"  )
	  if $msg = 6 then  GETPIX4()
   Else
	  MsgBox(0, "Не найден", $hex)
   EndIf
EndFunc

func GETPIX4()
$px = PixelSearch(0, @DesktopHeight, @DesktopWidth, 0, "0x" & $hex)
   IF NOT @ERROR THEN
	  MouseMove($px[0], $px[1])
	  $txt = StringRight(Hex(PixelGetColor($px[0], $px[1])), 6)
   	  $px14 = $px[0]
	  $px24 = $px[1]
	  ;Проверка на уникальность
	  $unique = ""
	  If $px11 = $px12 and $px12 = $px13 and $px13 = $px14 Then
	  If $px21 = $px22 and $px22 = $px23 and $px23 = $px24 Then $unique = "УНИКАЛЬНЫЙ :)"
	  EndIf 
   
	  $msg = MsgBox(0, "Найден #4# "  & $px[0] & ", " & $px[1], $hex & " = " & $txt & @LF & "ЗАВЕРШЕНО" & @LF & $unique  )
	    
   Else
	  MsgBox(0, "Не найден", $hex)
   EndIf
EndFunc


Здесь можно скачать http://leanna1983.narod2.ru/stuff/GetPixel.au3
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Код:
$pi=PixelSearch(0, 0, @DesktopWidth, @DesktopHeight,0xFCF700)
If Not @error Then MouseMove($pi[0],$pi[1])
ConsoleWrite($pi[0]&','&$pi[1]&'|1'&@CRLF)
MouseMove(500,500,0)
Sleep(1000)
 $pi=PixelSearch(@DesktopWidth, 0, 0, @DesktopHeight,0xFCF700)
 If Not @error Then MouseMove($pi[0],$pi[1])
 ConsoleWrite($pi[0]&','&$pi[1]&'|2'&@CRLF)
 MouseMove(500,500,0)
Sleep(1000)
 $pi=PixelSearch(@DesktopWidth, @DesktopHeight, 0, 0,0xFCF700)
 If Not @error Then MouseMove($pi[0],$pi[1])
 ConsoleWrite($pi[0]&','&$pi[1]&'|3'&@CRLF)
 MouseMove(500,500,0)
Sleep(1000)
$pi= PixelSearch(0, @DesktopHeight, @DesktopWidth, 0,0xFCF700)
If Not @error Then MouseMove($pi[0],$pi[1])
ConsoleWrite($pi[0]&','&$pi[1]&'|4'&@CRLF)
MouseMove(500,500,0)
Sleep(1000)

У меня в углу экрана область с уникальным цветом, и код исправно двинул мышь 4 раза в эту область. Упрости свой скрипт, делай от простого к сложному.
 
Автор
Leanna

Leanna

Новичок
Сообщения
25
Репутация
3
Спасибо большое! Это решение мне очень подходит!
 
Верх