Что нового

[Автоматизация] Остановка, запуск функции на хоткей

modnik

Знающий
Сообщения
138
Репутация
13
Доброго времени суток, понадобилось снова изучать АИ, но учитывая, что я не программист в проф. деятельности то разобраться не так просто.

Прошу ответить.
Вообщем суть такова, хочу чтобы на определенный хоткей начиналась выполняться функция, но чтобы если функция запущена и нажать на хоткей ещё раз функция тормозилась. Подозреваю, что здесь должен быть аналогичный код функции пазуа:
Код:
Global $Paused
Global $Off

HotKeySet("{F5}", "aristokrat")
HotKeySet("{F6}", "Stop")
HotKeySet("{F7}", "Close")

Func Stop()
$Paused = NOT $Paused
While $Paused
sleep(100)
WEnd
EndFunc


Проблема в том, что я понять этот код не могу. На ф6 назначили функцию стоп. Когда ещё нажимают то переменная $paused = not paused (вот тут и дальше непонятно)

Прошу помочь
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Что тут понимать?!
Код:
Global $Paused = False

HotKeySet("{F5}", "Pause")
HotKeySet("{F6}", "Stop")

While 1
	ConsoleWrite(StringFormat('> function Pause() is NOT activated\t[$Paused = %d]\n', $Paused))
	Sleep(1000)
WEnd


Func Pause()
	$Paused = NOT $Paused
	While $Paused
		ConsoleWrite(StringFormat('! function Pause() is activated\t\t[$Paused = %d]\n', $Paused))
		Sleep(1000)
	WEnd
EndFunc

Func Stop()
	Exit
EndFunc
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Garrett сказал(а):
Что тут понимать?!
Код:
Global $Paused = False

HotKeySet("{F5}", "Pause")
HotKeySet("{F6}", "Stop")

While 1
	ConsoleWrite(StringFormat('> function Pause() is NOT activated\t[$Paused = %d]\n', $Paused))
	Sleep(1000)
WEnd


Func Pause()
	$Paused = NOT $Paused
	While $Paused
		ConsoleWrite(StringFormat('! function Pause() is activated\t\t[$Paused = %d]\n', $Paused))
		Sleep(1000)
	WEnd
EndFunc

Func Stop()
	Exit
EndFunc


$Paused = NOT $Paused вот эта конструкция присваивает переменной $Paused = 1, потому что изначально была задана булева функция? а что есть если задать переменную $Paused = 10, а потом написать $Paused = not $Paused , какое будет значение?

И ещё While $Paused, почему здесь не пишет в явном виде $Paused =1
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
modnik [?]
а что есть если задать переменную $Paused = 10, а потом написать $Paused = not $Paused , какое будет значение?
Да хоть 20 напишите!
Код:
NOT $Paused ; дасть 1 (true) если $Paused = 0 и 0 (false) если $Paused >= 1


И ещё While $Paused, почему здесь не пишет в явном виде $Paused = 1
Пишите, кто вам мешает (однако это неправильно IMHO)

P.S. > А лучше почитайте сначала справку!
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Код:
Global $Paused = False

HotKeySet("{F5}", "Pause")
HotKeySet("{F6}", "Stop")

While 1
	ConsoleWrite(StringFormat('> function Pause() is NOT activated\t[$Paused = %d]\n', $Paused))
	Sleep(1000)
WEnd


Func Pause()
	$Paused = NOT $Paused
	While $Paused
		ConsoleWrite(StringFormat('! function Pause() is activated\t\t[$Paused = %d]\n', $Paused))
		Sleep(1000)
	WEnd
EndFunc

Func Stop()
	Exit
EndFunc

While 1
Mouseclcick("left",1,1)
Wend

Добавил цикл вне функции. После запуска программы будет повторяться нажатие кнопки. После нажатия F5 запускается функция Pause, а нажатие кнопки тормозится. Нажимаем F5 ещё раз и программа возвращается к основному циклу причём с того места где остановилась а не сначала скрипта. Правильно?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
modnik [?]

Не правильно.
До цикла
Код:
While 1
Mouseclcick("left",1,1)
Wend


Программа никогда не дойдет.

Когда Вы запускаете скрипт, программа проваливается в основной цикл:
Код:
While 1
    ConsoleWrite(StringFormat('> function Pause() is NOT activated\t[$Paused = %d]\n', $Paused))
    Sleep(1000)
WEnd


И выполняет его вечно. Как только Вы нажимаете F5 - данный цикл встает на паузу, и начинает выполняться функция Pause(). Как только данная функция отработает, основной цикл вновь продолжит свою работу.
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Medic84 сказал(а):
modnik [?]

Не правильно.
До цикла
Код:
While 1
Mouseclcick("left",1,1)
Wend


Программа никогда не дойдет.

Когда Вы запускаете скрипт, программа проваливается в основной цикл:
Код:
While 1
    ConsoleWrite(StringFormat('> function Pause() is NOT activated\t[$Paused = %d]\n', $Paused))
    Sleep(1000)
WEnd


И выполняет его вечно. Как только Вы нажимаете F5 - данный цикл встает на паузу, и начинает выполняться функция Pause(). Как только данная функция отработает, основной цикл вновь продолжит свою работу.


Ок, я понял. После снятия с паузы цикл продолжит работы на том месте где остановился (если бы он был сложнее это было бы нагляднее). А как подправить, чтобы после снятия с паузы основной цикл начался сначала
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
modnik

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Администратор.
 
Верх