Что нового

Как реализовать приостановку выполнения скрипта?

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Необходимо реализовать приостановку скрипта с последующим возобновлением его исполнения. Причем возобновление выполнения скрипта должно быть именно с того места, на котором произошла приостановка. Однако заранее не известно в каком месте кода произойдет очередная приостановка. Конкретный пример:
Код:
Dim $a, $b, $c, $d, $e

HotKeySet("!p", "_sleep")
HotKeySet("!з", "_sleep")

While 1
$a += 1
Sleep(1000)
ConsoleWrite("А = " & $a & @CRLF)
$b += 1
Sleep(1000)
ConsoleWrite("B = " & $b & @CRLF)
$c += 1
Sleep(1000)
ConsoleWrite("C = " & $c & @CRLF)
$d += 1
Sleep(1000)
ConsoleWrite("D = " & $d & @CRLF)
$e += 1
Sleep(1000)
ConsoleWrite("E = " & $e & @CRLF)
WEnd

Func _sleep()
	Sleep(5000)
EndFunc


При нажатии комбинации клавишь, скрипт приостанавливается, после чего возобновляется его исполнение именно с места приостонвки. Мне нужно все тоже самое, только не для комбинаций клавишь, а... Скажем, пока окно стороннего приложения активно (пусть будет окно блокнота) - скрипт выполняется. Как только окно становится не активным - скрипт приостонавливает работу до момента активизации указанного окна. После же активизации окна (блокнота), скрипт возобновляет исполнение кода именно с места приостановки. Как это реализовать?

Спасибо!
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Kalisnik
У меня так получилось:

Код:
Dim $a, $b, $c, $d, $e, $pause = True

HotKeySet("!p", "_sleep")
HotKeySet("!з", "_sleep")

While 1
$a += 1
Sleep(1000)
ConsoleWrite("А = " & $a & @CRLF)
$b += 1
Sleep(1000)
ConsoleWrite("B = " & $b & @CRLF)
$c += 1
Sleep(1000)
ConsoleWrite("C = " & $c & @CRLF)
$d += 1
Sleep(1000)
ConsoleWrite("D = " & $d & @CRLF)
$e += 1
Sleep(1000)
ConsoleWrite("E = " & $e & @CRLF)
WEnd

Func _sleep()
	$pause = Not $pause
    While Not $pause
		Sleep(10)
	WEnd
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
Dim $a = 0, $b = 0, $c = 0, $d = 0, $e = 0

AdlibRegister('_Helper', 100)

While 1
	$a += 1
	Sleep(1000)
	ConsoleWrite("А = " & $a & @CRLF)
	$b += 1
	Sleep(1000)
	ConsoleWrite("B = " & $b & @CRLF)
	$c += 1
	Sleep(1000)
	ConsoleWrite("C = " & $c & @CRLF)
	$d += 1
	Sleep(1000)
	ConsoleWrite("D = " & $d & @CRLF)
	$e += 1
	Sleep(1000)
	ConsoleWrite("E = " & $e & @CRLF)
WEnd

Func _Helper()
	While Not WinActive('Calculator')
		Sleep(10)
	WEnd
EndFunc   ;==>_Helper
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
SECTOR
нет-нет, нажатия клавишь мне вовсе не нужны - это я так, для пояснения их прикрутил.... )) Цикл в теле функции - это конечно разумеется, но "рубильником" приостановки скрипта должно быть состояние окна блокнота.
Вот у меня активное окно блокнота - скрипт выполняется. Щелкаю по пустому месту на рабочем столе - скрипт должен приостановиться. Щелкаю окно блокнота - скрипт возобновляет работу с места приостановки. Вот именно это мне и нужно ) Т.е. скрипт должен работать с активным окном блокнота, когда же окно блокнота неактивно, скрипт приостонавливается.
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
OffTopic:
Простите, как всегда недочитал пост до конца :smile:
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Yashied
Ой спасибо Вам! В который раз уже меня выручаете! :smile: Да прибудет с Вами сила мысли! Да не опустеет Ваш холодильник, а пиво в куружке пусть будет всегда прохладным! ;)
 
Верх