1 (изменено: huatou, 2021-02-03 06:18:05)

Тема: AHK: Событие по цвету в координатах

В общем очень далек от кодирования и прочей темы, но что-то да выжал из себя, но есть одно но... По отдельности каждый блок работает, но когда собираю в кучу (реально кучу), работает только первый блок. В общем, что нужно дописать или переделать чтобы выполнялось один из вариантов?
Описываю что именно должно происходить.. Если в определенном месте загорается определенный цвет, то нужно чтобы выполнялось нажатие определенной клавиши, привязанной к этому определенному месту.

sc10:: Reload
1::
Loop
{
	Label1:
	MouseGetPos, 967, 581
	PixelGetColor, color, 967, 581, alt
	Var1 = %color%
	if ( var1 = 0xFFFFFF )
	{
		SendInput, {sc12}
		sleep 25
		Goto, Label1
	}
	else
	{
		Label2:
		MouseGetPos, 960, 581
		PixelGetColor, color, 960, 581, alt
		Var2 = %color%
		if ( var2 = 0x000000 )
		{
			SendInput, {sc21}
			sleep 25
			Goto, Label2
		}
		else
		{
			Label3:
			MouseGetPos, 960, 577
			PixelGetColor, color, 960, 577, alt
			Var3 = %color%
			if ( var3 = 0xFFFFFF )
			{
				SendInput, {sc15}
				sleep 25
				Goto, Label3
			}
		}
	}
}
return

Буду рад критике и прочих высказываний в сторону моих рук, но повторюсь, я совсем не умею кодировать (вот прям совсем (все что написано выше, взято)) и для меня это впервые. Заранее благодарю за любую помощь, совет, а особенно за решение сей не легкой задачи.

2

Re: AHK: Событие по цвету в координатах

Код хорошо оформлен, читать удобно.
Вы зачем-то использовали подпрограммы, такие как Label1:. Их принято располагать где-то отдельно, а не внутри циклов и не внутри блока условий.  И заканчивать командой Return. Если нужно зациклить какое-либо действие, существует команда Loop. Если требуется разово "прыгнуть" в какую-то подпрограмму, и, по завершению её, вернуться в исходную точку, используют команду GoSub.

3

Re: AHK: Событие по цвету в координатах


sc10:: Work := 0

1:: 
	Work := 1
	Loop
	{ 
		If !Work
			Break
		if (GetColor(967, 581) = 0xFFFFFF)
			Gosub Label1
		Else If (GetColor(960, 581) = 0x000000)
			Gosub Label2
		Else If (GetColor(960, 577) = 0xFFFFFF)
			Gosub Label3 
		sleep 25
	}
	Return
	
GetColor(x, y) {
	PixelGetColor, color, x, y, alt 
	Return color
} 

Label1: 
	SendInput, {sc12}
	Return

Label2: 
	SendInput, {sc21} 
	Return

Label3: 
	SendInput, {sc15} 
	Return 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui