1 (изменено: protodefny, 2016-09-13 11:42:41)

Тема: AHK: Завершение скрипта при движении мышью

Добрый час! Сам не смог осилить скрипт, прошу помочь.

Нужно: после нажатия "горячей клавиши" мышь начинает кликать в одно и то же место с периодичностью 20 сек, а после любого движения мышью скрипт останавливался, но чтоб с возможностью запустить его снова через "хоткей".

Пока только так умею.


vk5C & Numpad5::
{
MouseClick, Left, 465, 148
Sleep, 20000
MouseClick, Left, 465, 148
Sleep, 20000
MouseClick, Left, 465, 148
Sleep, 20000
MouseClick, Left, 465, 148
}
return

Спасибо!

2

Re: AHK: Завершение скрипта при движении мышью

protodefny код оформляется тегом "code".

Для прерывания цикла используйте команду Break.
Чтобы отловить смещение курсора, можно периодически проверять его позицию. Команда MouseGetPos.

3

Re: AHK: Завершение скрипта при движении мышью

Пытаюсь хоть немного разобраться с AHK:

CoordMode, Mouse, Screen
x1 := 465, y1 := 148

vk5C & Numpad5::
	Gosub, OnTimer
	SetTimer, OnTimer, 20000
	Loop {
		Sleep 100
		MouseGetPos, x2, y2
	} Until, x1 <> x2 or y1 <> y2
	SetTimer, OnTimer, Delete
	Exit

OnTimer:
	MouseClick, Right, x1, y1
	Return

4

Re: AHK: Завершение скрипта при движении мышью

Спасибо за поправку, упустил.

Я пробовал изучить команду "MouseGetPos", считывать координаты вроде получается, но как применить её в моём случае не знаю. Какие символы (<>xy pos)и как правильно размещать, чтоб они выполнили нужную мне функцию?

Пробовал навоять подобное, но наверняка у меня куча ошибок, поэтому обращаюсь за помощью:


vk5C & Numpad5::
{
MouseClick, Left, 465, 148

Loop
{
Sleep, 20000
MouseClick, left
}
if mousegetpos x<>465, y<>148, break
}
return

5

Re: AHK: Завершение скрипта при движении мышью

MouseGetPos помещает координаты X и Y в указанные переменные.

Выражение IF должно иметь синтаксис:


IF (x <> 465) OR (y<>148)
	{
	; действия, если истина
	}
ELSE
	{
	; действия, если ложь
	}

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

6 (изменено: wisgest, 2016-09-13 12:27:57)

Re: AHK: Завершение скрипта при движении мышью

protodefny пишет:
if mousegetpos x<>465, y<>148, break

Ужас!

mousegetpos x, y
if (x<>465 or y<>148)
	break

Впрочем, команда вне цикла, так что прерывать нечего. Но до неё дело не дойдёт, т.к. в цикле нет условий выхода. Если же её просто внести внутрь цикла, то всё равно проверка изменения положения будет выполнятся только непосредственно перед или после отправки щелчка. Т.е. чаще надо выполнять MouseGetPos, а MouseClick не после каждого Sleep, а, например, через определённое число раз или проверять время прошедшее с последнего щелчка.

7 (изменено: protodefny, 2016-09-13 12:23:11)

Re: AHK: Завершение скрипта при движении мышью

Спасибо wisgest, всё работает как надо. (только ПКМ поменял на ЛКМ.)

P.S. И спасибо за разъяснения, AHK интересная программа, буду потихоньку осваивать.