1

Тема: AHK: создание последовательности условий if

привет.
Я пытаюсь настроить последовательное выполнение условий: если выполнено - нажать кнопку 1. Если не выполняется - перейти к следующему шагу поиска пикселя и нажатия кнопки 2. Но даже дальше третьего шага почему то зайти не могу. Что не так?

loop
F1::
{					
PixelGetColor, Color, 1785, 70 
if (Color = 0x79BB84) 
    {  

	SendInput 6
	Sleep 100
		PixelGetColor, Color, 928, 304 	
		if (Color = 0xABCAF7) 
		{  
		
		SendInput 4 ;жмем 4
			PixelGetColor, Color, 845, 239 	
			if (Color = 0x500223)
			{  
			
			SendInput +2 
			return
			}
		return
		}
	return
	}
	
	PixelGetColor, Color, 1785, 70 	 
	if (Color = 0x79BB84) 
    {  
	
	SendInput 4 
	Sleep 250
	return
	}
	
	SendInput 3 
}
return					; возвращаем положение скрипта к "loop"

2

Re: AHK: создание последовательности условий if

loop - цикл, почему он за пределами запуска по клавише?

Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: создание последовательности условий if

__Михаил__
не знаю, так было в исходном скрипте, что я модифицирую. На самом деле сама зацикленность скрипта тут не нужна, как только я перенес loop ниже клавиши активации - у меня спамится последнее SendInput.
Есть ощущение, что мне не хватает некоего else.
Третий шаг "SendInput +2 " почему то не хочет исполняться

4 (изменено: deadskiy sad, 2021-04-22 09:59:18)

Re: AHK: создание последовательности условий if

1. Почему бы не исправить код, если вы перенесли Loop, и стало работать хоть что-нибудь?

2. Return - завершение скрипта. Что завершение скрипта делает в самом цикле?

3.

If (Color = 0x79BB84)

У вас неправильно. Надо вот так:

If Color = 0x79BB84

Разница: http://forum.script-coding.com/viewtopi … 222#p41222

4. Не легче ли вписать

SendMode Input

В начало скрипта, и заменить SendInput на Send?

5. https://ahk-wiki.ru/loop
Вы уверены, что вам нужен именно Loop? Может стоит попробовать While в сочетании с GetKeyState?

6. Клавишу, которую должна отправить команда Send, лучше указывать в фигурных скобках.

5

Re: AHK: создание последовательности условий if

deadskiy sad
1. Код работает на 70%, возможно тут loop нужен только чтобы return работал. наверное по п.5 это можно исправить
2. Логика такая: если было совершено нажатие клавиши - вернись и начни проверять цвета с начала.
3. поправил.
4. да это уже оптимизация кода))
5. То есть если я хочу, чтобы был проверен пиксель и его соответствии была нажата кнопка шифт+2, я должен прописать это так?

	PixelGetColor, Color, 837, 216
			while GetKeyState("+{2}")
			if Color = 0xFF00A3
			{  
			SendInput +{2} ;жмем +2
			Sleep 100
			}
			return

6. поправил

6 (изменено: deadskiy sad, 2021-04-21 13:01:54)

Re: AHK: создание последовательности условий if

Вот так:

#NoEnv
SendMode Input

*F1::
{
 PixelGetColor, Color, 837, 216
 If Color = 0xFF00A3
  {  
  Send, +{2}
  Sleep, 100
  }
}
Return

При каждом нажатии клавиши F1 будет происходить поиск пикселя (BGR), если совпадение найдено, нажимается Shift + 2.
Насчет логики я не совсем понял.
Вам надо на каждое нажатие хоткея производить один поиск пикселя и последующее действие? Если да, то этот скрипт делает именно это.
Или вы хотите, чтобы при нажатии хоткея скрипт повторялся до тех пор, пока вы заново не нажмете хоткей?