Что нового

[Мышь, клавиатура] Задание матрицы координат для автоматических кликов

DigiMind

Новичок
Сообщения
2
Репутация
0
Здравствуйте, уважаемые участники форума.

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

В общем, у меня в скрипте есть цикл, который делает клики по заданным координатам:

Код:
For $count = 1 To 3

MouseMove(100, 100, 0)
MouseClick ("left")
MouseMove(100, 150, 0)
MouseClick ("left")
MouseMove(100, 200, 0)
MouseClick ("left")

MouseMove(200, 100, 0)
MouseClick ("left")
MouseMove(200, 150, 0)
MouseClick ("left")
MouseMove(200, 200, 0)
MouseClick ("left")

Opt("MouseClickDelay", 1)
Next


Как видите, здесь на каждый клик идёт смещение на 50 точек сначала по горизонтали; после этого курсор смещается на 100 точек по вертикали, и снова делает три клика по горизонтали. И это всё циклится необходимое количество раз.

Подскажите, пожалуйста, можно ли параметры координат этой матрицы кликов как-то вынести "за пределы" скрипта?
Чтобы было понятнее, - объясню: мне нужно часто переписывать этот скрипт для определённых задач. В данном случае смещение координат происходит на 50 точек по горизонтали, и потом на 100 по вертикали. В другом случае эти смещения будут сначала на 38 точек, а потом на 94 по вертикали. А в другом случае уже новые значения смещений, и т.д.


В идеале, нужно чтобы перед началом цикла были параметры, которые можно менять:

- координаты начальной точки, от которой будет идти отсчёт смещения для последующих кликов;

- величина смещения по горизонтали в точках;
- количество смещений по горизонтали (в моём примере идёт матрица 3х2, а иногда требуется и 4х7, и 9х9, и т.п.)

- величина смещения по вертикали в точках;
- количество смещений по вертикали (опять же, чтобы задать необходимый размер матрицы кликов)

Если эти параметры слишком усложнят скрипт, то можно написать так, чтобы матрица была квадратная, типа 5х5, или 12х12, и т.п. Тогда в параметрах не нужно будет задавать разные величины смещений отдельно для вертикали и горизонтали, а нужны будут только количества смещений.

Если невозможно вынести эти параметры в отдельные цифры, то можно изменить только немного что-нибудь. Сейчас мне под каждую задачу приходится пересчитывать и переписывать каждую координату. Чем меньшего количества правок кода удастся добиться, тем лучше.


Надеюсь, понятно объяснено :smile:

Заранее благодарю за любые подсказки, которые могли бы облегчить изменение этого кода!
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
DigiMind сказал(а):
вынести "за пределы" скрипта
Конечно, в файл(лучше в ini для удобства считывания)
Там же можно и организовывать шаги для смещения и начальные координаты
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Код:
$sPath_ini = @ScriptDir & "\option.ini" ; путь к ini-файлу
$iStartX = IniRead($sPath_ini, "option", "iStartX", "Не найдено") 			; стартовая позиция по X
$iStartY = IniRead($sPath_ini, "option", "iStartY", "Не найдено") 			; стартовая позиция по Y
$iCountX = IniRead($sPath_ini, "option", "iCountX", "Не найдено") 			; количество увеличений по X
$iCountY = IniRead($sPath_ini, "option", "iCountY", "Не найдено") 			; количество увеличений по Y
$iStepX = IniRead($sPath_ini, "option", "iStepX", "Не найдено") 			; шаг увеличения по X
$iStepY = IniRead($sPath_ini, "option", "iStepY", "Не найдено") 			; шаг увеличения по Y
$iCountRepeat = IniRead($sPath_ini, "option", "iCountRepeat", "Не найдено") ; Количество повторений в цикле


Opt("MouseClickDelay", 1)

For $i = 0 To $iCountRepeat
   $iX = $iStartX
   For $n = 1 To $iCountX
	  $iY = $iStartY
	  For $m = 1 To $iCountY
		 MouseClick ("left", $iX , $iY, 1, 0)
		 ;MsgBox(64, "X = " & $iX , "Y = " & $iY)
		 $iY += $iStepY
	  Next
	  $iX +=$iStepX
   Next
Next


содержимое INI-файла:
Код:
[option]
iStartX = 100		
iStartY= 100		
iCountX= 7			
iCountY= 3			
iStepX= 100			
iStepY= 50			
iCountRepeat = 3
 
Автор
D

DigiMind

Новичок
Сообщения
2
Репутация
0
beliy, спасибо огромное за такой конкретный :smile: ответ!
Скрипт работает именно так, как я и хотел в самом лучшем варианте. Да и код выглядит красиво.
 
Верх