1

Тема: AHK: оптимизация кода с помощью A_Index

Здравствуйте. Имеется код написанный на АХК. Суть его в том, что бы он искал в определенной области картинки и записывал их координаты в переменные, за тем производился клик по эти координатам. Я хочу немного сократить этот код используя "A_Index", но не могу никак разобраться. Прошу вашей помощи.

F4::
Loop 1{
	CoordMode, Pixel, Screen
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\1.png
	1X = %OutputVarX%
	1Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\2.png
	2X = %OutputVarX%
	2Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\3.png
	3X = %OutputVarX%
	3Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\4.png
	4X = %OutputVarX%
	4Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\5.png
	5X = %OutputVarX%
	5Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\6.png
	6X = %OutputVarX%
	6Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\7.png
	7X = %OutputVarX%
	7Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\8.png
	8X = %OutputVarX%
	8Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\9.png
	9X = %OutputVarX%
	9Y = %OutputVarY%
	ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\10.png
	10X = %OutputVarX%
	10Y = %OutputVarY%
	Click, %1X%, %1Y%
    Sleep, 500
	Click, %2X%, %2Y%
    Sleep, 500
	Click, %2X%, %2Y%
    Sleep, 500
	Click, %3X%, %3Y%
    Sleep, 500
	Click, %3X%, %3Y%
    Sleep, 500
	Click, %4X%, %4Y%
    Sleep, 500
	Click, %4X%, %4Y%
    Sleep, 500
	Click, %5X%, %5Y%
    Sleep, 500
	Click, %5X%, %5Y%
    Sleep, 500
	Click, %6X%, %6Y%
    Sleep, 500
	Click, %6X%, %6Y%
    Sleep, 500
	Click, %7X%, %7Y%
    Sleep, 500
	Click, %7X%, %7Y%
    Sleep, 500
	Click, %8X%, %8Y%
    Sleep, 500
	Click, %8X%, %8Y%
    Sleep, 500
	Click, %9X%, %9Y%
    Sleep, 500
	Click, %9X%, %9Y%
    Sleep, 500
	Click, %10X%, %10Y%
    Sleep, 500
	Click, %10X%, %10Y%
    Sleep, 500
}

2

Re: AHK: оптимизация кода с помощью A_Index

А зачем у вас весь код обрамлён в

Loop 1{
	...
}

?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Admiral_Lexa, 2023-06-23 21:55:15)

Re: AHK: оптимизация кода с помощью A_Index

teadrinker
Это часть кода из общего скрипта, в данном участке кода мне нужно, что бы он 1 раз повторил его, поэтому "Loop 1".

4 (изменено: Admiral_Lexa, 2023-06-23 22:25:54)

Re: AHK: оптимизация кода с помощью A_Index

У меня есть мысли по этому поводу, но скрипт не работает, возможно я не правильно объявляю переменные.

F4::
    CoordMode, Pixel, Screen
    Loop, 10 {
        ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080, *20 %A_ScriptDir%\%A_Index%.png
        X%A_Index% := OutputVarX
        Y%A_Index% := OutputVarY
    }
    Loop, 10 {
        Click, X%A_Index%, Y%A_Index%
        Sleep, 500
        Click, X%A_Index%, Y%A_Index%
        Sleep, 500
    }

5

Re: AHK: оптимизация кода с помощью A_Index

Admiral_Lexa пишет:

в данном участке кода мне нужно, что бы он 1 раз повторил его, поэтому "Loop 1".

Так и какой смысл от Loop? Он здесь не нужен.

Admiral_Lexa пишет:

ImageSearch, OutputVarX, OutputVarY, 0, 0, 1920, 1080,  *20 %A_ScriptDir%\1.png
1X = %OutputVarX%
1Y = %OutputVarY%

Зачем такое делать? Почему нельзя сразу положить результат в нужную переменную?
Если уж на то пошло, то используйте лучше массивы, вместо пвсевдо массивов.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

6

Re: AHK: оптимизация кода с помощью A_Index

Согласен, говнокод получается, именно поэтому я и пришёл за помощью на форум. Возможно в будущем кому-то это пригодиться.

7

Re: AHK: оптимизация кода с помощью A_Index

Можно так:

F4:: 
   Loop 1 {
      CoordMode, Pixel, Screen
      Loop 10 {
         ImageSearch, %A_Index%x, %A_Index%y, 0, 0, 1920, 1080, *20 %A_ScriptDir%\%A_Index%.png
      }
      Loop 10 {
         i := A_Index
         Loop 2 {
            Click % %i%x . " " . %i%y
            Sleep, 500
         }
      }
   }
Return

В команде Click нет запятой между координатами, смотрите справку.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: оптимизация кода с помощью A_Index

С запятой у меня 'Click' тоже работает. Или это в последней версии АХК исправили?

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

9

Re: AHK: оптимизация кода с помощью A_Index

Да, оказывается работает. В этой команде только один параметр, так что запятая скорее всего просто игнорируется.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder