1 (изменено: Partizanr, 2021-01-25 21:21:56)

Тема: AHK сложность с ImageSearch не ищет повторно.

Добрый вечер. Связался я в игре с помощником а лице AHK. Суть проста пока я держу RButton найти изображение в верхней части экрана и нажать кнопку T. Все бы ничего но после того как находит 1 раз и нажимает Т. Loop заканчивается как будто и в игре не нажимает Т повторно.  Если я перетаскиваю кусок картинки на рабочем столе в нужное мне поле поиска то Loop триггерится и прожимает все очень хорошо повторяясь сотню раз в секунду. Но именно в игре после запуска скрипта выплняет только 1 раз. При этом он остается включенным и если опять же перенести кусочек на рабочем столе в поле поиска то все продолжает работать.  Пример кода из интернета на который наткнулся


~RButton::
Loop,
{
ImageSearch, xp, yp, xx, xx, xx, xx, *xx yyyy.png
If xp > 0
}

Придерживаюсь такого варианта он работате как нужно но только в плане пока держу а искать не ищет (Вернее на рабочем столе в нужном отрезке он ищет пока держу и жмет Т. Отпускаю прекращает. Нажимаю и снова находит клацая много раз Т. Но в игре... нет)


CoordMode, Pixel, Relative
GetKeyState, state, RButton, P

~RButton::
Start:
KeyWait, RButton, D

While GetKeyState("RButton", "P")
{
Loop {
ImageSearch, xp, yp, 0, 0, 700, 70, *30 *TransBlack 44.bmp
if xp > 0
Send t
else ImageSearch, xr, yr, 0, 0, 1000, 70, *80 *TransBlack 444.png
if xr > 0
Send T

If state = D
continue
else goto, Start
}
}

F10::ExitApp
F12::Suspend, Toggle

Идея чтоб находил изображение и нажимал Т в ином случае если не держу кнопку RButton то он не ищет и ждет когда нажму чтоб начать искать непрерывно повторяя цикл пока держу кнопку.
Прошу совета и наглядного примера что может заставить подобный скрипт работать. пример изображения в закрепе

И еще проблемка... В самых первых координатах примерно 300х70 по площади находит а дальше не находит и именно в игре. На рабочем столе хоть до конца экрана все находит и работает.

Post's attachments

444.png
444.png 2.08 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2

Re: AHK сложность с ImageSearch не ищет повторно.

Уж больно большой объём текста. Сократить бы до конкретного задания.

3

Re: AHK сложность с ImageSearch не ищет повторно.

__Михаил__ Старался понятно изложить суть проблемы и задания. Ну вроде сократил

4

Re: AHK сложность с ImageSearch не ищет повторно.

Partizanr

Как пример, можно посмотреть этот код поиска картинки и нажатия на неё.

5

Re: AHK сложность с ImageSearch не ищет повторно.

__Михаил__ Проблема еще в том что я разбираюсь в ахк скриптах пару дней). А там в виде целой программы с использованием  функций о которых я даже не знаю) какой то вариант в виде "найти пока держу ПКМ и клацать Т каждый раз когда находит" возможен?

6 (изменено: __Михаил__, 2021-01-26 00:18:38)

Re: AHK сложность с ImageSearch не ищет повторно.

Найти картинку при удержании - возможно.

#SingleInstance Force
#NoEnv
SetBatchLines -1

CoordMode, Mouse, Screen

; Путь к картинке:
;Pict := "Картинка.png"		; Если в одной папке со скриптом.
Pict := "C:\Картинка.png"		; Полный путь к файлу.


; Заполнить позиции поиска кнопки:
X1 := 0			; X от этой позиции.
Y1 := 0			; Y от этой позиции.
X2 := A_ScreenWidth	; X до этой позиции - вся ширина монитора.
Y2 := A_ScreenHeight	; Y до этой позиции - вся высота монитора.


; Поиск картинки пока зажата ПКМ:
RButton::
While(GetKeyState("vk2", "P"))
{
 ImageSearch, X,Y, X1, Y1, X2, Y2, *60 %Pict%	; Поиск картинки с погрешностью (60 из 255).
 ErrorLevel ? 0 : Click(X,Y)	; Если картинку удалось найти.
}
Return


Click(X,Y){
 Tool("Картинка тут: [" X ", " Y "]",,0,0)
; MouseMove, % X, % Y		; Передвинуть мышь.
 Sleep, 100
 SendInput, T			; Нажать клавишу 'T'.
; Click				; Кликнуть.
}



;05:44 19.07.2020	ToolTip на время:
; Wait = таймер если != 0, иначе ожидает отжатия клавиши.

Tool(Text, Wait := 2000, X := "", Y := "")
{
 SetTimer, T_Off, % Wait
 ToolTip, % Text, %X%, %Y%
 If Wait
  SetTimer, T_Off, % Wait
 Else
 {
  KeyWait, %A_ThisHotkey%, U
  ToolTip
 }
 Return
}
T_Off:
SetTimer, T_Off, Off
ToolTip
Return

7

Re: AHK сложность с ImageSearch не ищет повторно.

__Михаил__ Спасибо большое. В голове все казалось проще ) Буду пробовать завтра

8

Re: AHK сложность с ImageSearch не ищет повторно.

Partizanr

В большинстве случаев в полноэкранном режиме, АХК картинки плохо находит. Советую отключить, если такие настройки присутствуют.

9

Re: AHK сложность с ImageSearch не ищет повторно.

__Михаил__ Использую окно без рамки. Тот что я собирал из костылей то работал абы как но работал. не додумался вовремя картинки переделать под новое разрешение. Но Ваш вариант симпатичнее) попробую завтра в деле. и попробую безопасно изъять пояснительные функции. те что показывают где находится изображение и функции мыши.

10 (изменено: Partizanr, 2021-01-26 10:13:15)

Re: AHK сложность с ImageSearch не ищет повторно.

__Михаил__ Проверил работать работает но на рабочем столе. Убрал тултип "картинка тут" в комментарий. В общем итог такой же. На рабочем столе работает как надо. В игре нет... То есть при развернутой игре находит 1 раз потом перестает. И вырезал картинку по разному от большой до очень маленькой. Не пойму что нужно. Особенно не понятно каким образом до этого работало.. картинка статичная и единственная активность это появляется и пропадает в виде "баффа" или типа того. Площадь поиска сменил не на весь экран чтоб не долго искал а так же до 0 0 1000 90

11

Re: AHK сложность с ImageSearch не ищет повторно.

Partizanr

Возможно в игре защита какая, я в этом не спец. Как вариант проверить цвета в области где картинка на соответствие, если нужные цвета - выполнить действие.

12 (изменено: Partizanr, 2021-01-27 15:18:30)

Re: AHK сложность с ImageSearch не ищет повторно.

Появилась что то типа идеи. Но практических знаний не хватает. Из примеров пытался что то слепить но не понимаю как после поиска обратиться к функции и использовать эти переменные в другом поиске.

 
~RButton::
While(GetKeyState("RButton", "P"))
{
 PixelSearch, X, Y, X1, Y1, X2, Y2, 0xB9F4AA, 3, fast
ErrorLevel ? 0 : Mat(X,Y)  
 ImageSearch, IX, IY, %Xx%, 0, %Var1%, 90, *60 %Pict%  
 ErrorLevel ? 0 : Click(X,Y)	
}
Return

Mat(X,Y){
Xx := X
Var1 := Xx + 200
;MsgBox, Xx = %Xx% Var = %Var1%  Проверял получается ли правильный расчет
}

Click(X,Y){
; Tool("Картинка тут: [" X ", " Y "]",,0,0)
; MouseMove, % X, % Y		; Передвинуть мышь.
 Sleep, 100
 SendInput, T			; Нажать клавишу 'T'.
; Click				; Кликнуть.
}

Идея в том что бы после поиска пикселя использовать переменные "X, Y,, " для расчета квадрата поиска картинки потому что проблема как мне кажется в координатах поиска картинки. Хочется сузить область поиска и сделать более точны поиск.
Найти пиксель и его координат. вычислить  квадрат поиска от пикселя и найти изображение а дальше функция "Click(X,Y) " для нажатия Т.
Но мозгов не хватает это правильно слепить. Есть ли какой то вариант это исполнить?

13

Re: AHK сложность с ImageSearch не ищет повторно.


Mat(X,Y){
Xx := X - 40
Var1 := X + 180
 ImageSearch, IX, IY, Xx, 25, Var1, 80, *25 3333.png  ; Поиск картинки с погрешностью (60 из 255).
 ErrorLevel ? 0 : Click(IX,IY)
 ;ToolTip,IX = %IX% IY = %IY%
 ;ToolTip, Xx = %Xx% Var = %Var1%
}

Click(IX,IY){
; Tool("Картинка тут: [" IX ", " IY "]",,0,0)
 Sleep, 87
 SendInput, T			; Нажать клавишу 'T'.
}

Вроде разобрался работает пока как нужно

14

Re: AHK сложность с ImageSearch не ищет повторно.

Функция по умолчанию стирает все переменные, что в ней использовались. Другими словами, если нужно сохранить результат можно сделать следующее:
1) Объявить переменные глобально (возможно лучший вариант).
2) Сделать возврат нужных переменных туда, где происходит запуск функции.