Всем привет недавно начал изучать AHK и столкнулся с проблемой нужно https prnt.sc /114kusa https youtu.be /EchCvHdeliQ Broken Link for safety вот пример как выглядит полоска
как с помощью AHK отследить ее изменение именно когда она начала двигаться выполнить 1 действие когда не двигается то другое действие
помогите не могу понять логику
Как отследить движение цвета
Как отследить движение цвета
Last edited by woxaz on 05 Apr 2021, 02:36, edited 3 times in total.
Re: Как отследить движение цвета
- Attachments
-
- вопрос.png (7.12 KiB) Viewed 2072 times
Re: Как отследить движение цвета
Полоска по горизонтали довольно равномерна − это плюс. Слева синие цвета, справа − тёмно-коричневые.
Можно искать в однопиксельной полоске с помощью PixelSearch тёмно-коричневый цвет − так как поиск идёт слева направо, координаты первого найденного пикселя и будут текущим значением. Остаётся в цикле проверять, не изменилось ли оно с прошлого такта.
Если шаг изменения не слишком велик, можно повысить производительность, сканируя только небольшую область вокруг последнего значения.
Можно искать в однопиксельной полоске с помощью PixelSearch тёмно-коричневый цвет − так как поиск идёт слева направо, координаты первого найденного пикселя и будут текущим значением. Остаётся в цикле проверять, не изменилось ли оно с прошлого такта.
Code: Select all
barX := 100 ; Координаты левого верхнего угла полоски
barY := 100 ;
barWidth := 230 ; Длина полоски в пикселях
lookupColor := 0x0D102B ; Искомый цвет (я взял самый тёмный)
lastValue := 100
Loop {
PixelSearch, px, py, %barX%, %barY%, % barX+barWidth, % barY+1, %lookupColor%, 20
If (py == "")
Break
If (py != lastValue) { ; Полоска сдвинулась
; Делаем дела
lastValue := py
}
Sleep 150
}
github://oGDIp - GDI+ wrapper for AHK v1.1
Re: Как отследить движение цвета
Что-то не работает вопрос по коду почему
If (py == "") ? py -- я так понимаю проверка по У и она проверяет на пустоту если нет координат то выходит вроде понятно
Break
полоска двигаться по Х
If (py != lastValue) { ; Полоска сдвинулась тут опять же проверка идет по -У- что такое lastValue ( 100 ) немного не понятно причем тут 100 начальная координата
проблема в том что полоска постоянно сдвигаться вправо и есть выбор или нажать F2 когда она не двигается
тогда она уменьшиться или нажать F3 когда полоса в движении тогда она тоже уменьшиться суть сдвинуть ее влево
Идея хорошая нужна помощь как сделать проверку цвета в координатах например 373, 522, 600, 522, 0x0F122D
и сохранить найденную координату -Х- в переменную и потом выполнить проверку на изменение этой переменой если
она равна то Нажимать {F2} Пока оно равно. Как только стала не равна Нажать {F3} и так повторять пока он видит цвет
в 373, 522, 600, 522, 0x0F122D как только цвет пропал ждать пока он не появиться и когда появился повторить то что выше
и так до безконечности
If (py == "") ? py -- я так понимаю проверка по У и она проверяет на пустоту если нет координат то выходит вроде понятно
Break
полоска двигаться по Х
If (py != lastValue) { ; Полоска сдвинулась тут опять же проверка идет по -У- что такое lastValue ( 100 ) немного не понятно причем тут 100 начальная координата
проблема в том что полоска постоянно сдвигаться вправо и есть выбор или нажать F2 когда она не двигается
тогда она уменьшиться или нажать F3 когда полоса в движении тогда она тоже уменьшиться суть сдвинуть ее влево
Идея хорошая нужна помощь как сделать проверку цвета в координатах например 373, 522, 600, 522, 0x0F122D
и сохранить найденную координату -Х- в переменную и потом выполнить проверку на изменение этой переменой если
она равна то Нажимать {F2} Пока оно равно. Как только стала не равна Нажать {F3} и так повторять пока он видит цвет
в 373, 522, 600, 522, 0x0F122D как только цвет пропал ждать пока он не появиться и когда появился повторить то что выше
и так до безконечности
Re: Как отследить движение цвета
Code: Select all
F9::
Loop {
run:
lastValue := 373
PixelSearch, Px, Py, 373, 522, 600, 524, 0x0F122D, 3, Fast
if ErrorLevel
goto, run
else
If (Px != lastValue) { ; Полоска сдвинулась
; Делаем дела
Tooltip %Px%
SendInput, {F3}
;Px := Pxp
lastValue := Px
}
If (Px == lastValue) { ; Полоска не сдвинулась
; Делаем дела
Tooltip %Px%
SendInput, {F2}
lastValue := Px
}
}
return
F12::Reload
Pause::Pause
Как довести до ума этот код он жмет обе кнопки, одновременно, а должен проверить на совпадение с первой найденной координатой по Х и если не изменилось нажать 1 кнопку а если изменилось то 2 и так постоянно проверять пока не пропадет полоска
Re: Как отследить движение цвета
Code: Select all
If (Px != lastValue) { ; Полоска сдвинулась
...
lastValue := Px
} Else { ; Полоска не сдвинулась
...
lastValue := Px ; ←← Это не нужно, мы уже убедились, что они идентичны.
}
}
Инициализация lastValue должна быть вне Loop-цикла, иначе на каждом повторе она будет сбрасываться, и весь её смысл теряется.
github://oGDIp - GDI+ wrapper for AHK v1.1
Re: Как отследить движение цвета
Code: Select all
F9::
lastValue := 373
Loop {
run:
PixelSearch, Px, Py, 373, 523, 600, 523, 0x131A37, 3, Fast
if ErrorLevel
goto, run
If (Px != lastValue) { ; Полоска сдвинулась
Tooltip %Px%
SendInput, {F3}
Sleep 3
lastValue := Px
}
Else { ; Полоска не сдвинулась
Tooltip %Px%
SendInput, {F2}
Sleep 5
}
}
return
F12::Reload
Pause::Pause
чего-то не хватает нажимает 2 кнопки хотя должен жать согласно условию
Re: Как отследить движение цвета
Полоска сдвинулась → Нажимаем F3 → Ждём 3 миллисекунды → Полоска не сдвинулась → Продолжаем жать F2.
github://oGDIp - GDI+ wrapper for AHK v1.1
Re: Как отследить движение цвета
Удалось решить вопрос, колдовал колдовал, не получилось. Может кто поделиться рабочим вариантом. проблема в том что цвет полоски не однородный и очень часто полоска стоит а определяется как сдвиг.
Who is online
Users browsing this forum: No registered users and 29 guests