Leanna
Новичок
- Сообщения
- 25
- Репутация
- 3
Мне понадобилась программа, что бы смотреть уникальный ли это цветовой пиксель на экране или нет,
в итоге нашла некий код и модифицировала его под себя.
Код простой. Но во второй-третьей-четвертой попытке неверно выдаются координаты по PixelSearch.
Разница между этими "попытками" (а именно в GETPIX GETPIX2 GETPIX3 GETPIX4)
в том как расставлены координаты left, top, right, bottom у PixelSearch
Что так можно делать написано в справке:
Вы могли бы подсказать, что не так?
Т.е. hex задается тот же, а выдаются координаты на которых вообще другой цветовой hex.
Почему?
Объяснения по скрипту закомментила, что бы проще было понять.
Здесь можно скачать http://leanna1983.narod2.ru/stuff/GetPixel.au3
в итоге нашла некий код и модифицировала его под себя.
Код простой. Но во второй-третьей-четвертой попытке неверно выдаются координаты по 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
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