Что нового

Как задать клавишу паузы скрипта?

Can

Новичок
Сообщения
59
Репутация
1
Здравствуйте!

Подскажите пожалуйста, как задать паузу выполнения скрипта?
Например:
HotKeySet ( "{ESC}" ,"_Exit") - это выход из программы, а как задать клавишу паузы, чтобы при первом нажатии скрипт остановился в текущем месте, а при повторном нажатии на неё, скрипт продолжил выполняться дальше ?
 

Anton

Твори! Пусть завистники твои захлебываются пылью!
Сообщения
69
Репутация
3
Ну можно как не будь так
Код:
HotKeySet ( "{ESC}" ,"PauseFunc")
$var = 0

For $i = 1 To 100
	Beep(500, 500)
	sleep (50)
Next


Func PauseFunc()
	If $var = 0 Then
		$var = 1
		PauseFunc2()
	Else
		$var = 2
	EndIf
EndFunc

Func PauseFunc2()
	While 1
		If $var = 2 Then
			$var = 0
			ExitLoop
		EndIf
		Sleep(500)
	WEnd
EndFunc
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Код:
Global $iPause = 0

HotKeySet('{ESC}', '_Exit'); Exit key
HotKeySet('!p', '_Pause'); Alt+p

$i = 0
While 1
	ConsoleWrite($i & @CRLF)
	$i += 1
	Sleep(100)
WEnd

Func _Exit()
	ConsoleWrite('Exiting' & @CRLF)
	Exit
EndFunc

Func _Pause()
	$iPause = Not $iPause
	If $iPause Then
		ConsoleWrite('Script is pausing' & @CRLF)
	Else
		ConsoleWrite('Script is unpausing' & @CRLF)
	EndIf
	While $iPause
		Sleep(100)
	WEnd
EndFunc
 
Автор
C

Can

Новичок
Сообщения
59
Репутация
1
А например, в этот скрипт как правильно вставить вышеуказанный, а то у меня что-то не получается?

Код:
HotKeySet ( "{ESC}" ,"_Exit")
Global $i,$p,$r

While 1 
   Cycle1()
   Cycle2()
   Cycle3()
   Sleep(270)
WEnd

Func Cycle1()
   $i = 0
   While $i <= 2
      PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
      ;If $iPar1=1 Then    $i=0  
      If Not @error Then
         MouseClick("left", 213, 528, 2, 5)
         
         $i=0
      Else
         MouseClick("left", 713, 528, 2, 5)
         
         Cycle3()
      EndIf 
      Sleep(50)
      $i = $i + 1   
      ConsoleWrite('Cycle1 ' & $i & @LF)
   WEnd
EndFunc
;..............................
Func Cycle2()
;..............................
Func Cycle3()
;.............................



Чтобы можно было в любой момент выполнения скрипта сделать паузу, нажав заданную клавишу?

Заранее спасибо!
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Код:
Global $iPause = 0

HotKeySet('{ESC}', '_Exit'); Exit key
HotKeySet('!p', '_Pause'); Alt+p
Global $i,$p,$r

While 1
   Cycle1()
   Cycle2()
   Cycle3()
   Sleep(270)
WEnd

Func Cycle1()
   $i = 0
   While $i <= 2
      PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
      ;If $iPar1=1 Then    $i=0  
      If Not @error Then
         MouseClick("left", 213, 528, 2, 5)
         
         $i=0
      Else
         MouseClick("left", 713, 528, 2, 5)
         
         Cycle3()
      EndIf
      Sleep(50)
      $i = $i + 1  
      ConsoleWrite('Cycle1 ' & $i & @LF)
   WEnd
EndFunc
;..............................
Func Cycle2()
;..............................
Func Cycle3()
;.............................
Func _Exit()
    ConsoleWrite('Exiting' & @CRLF)
    Exit
EndFunc

Func _Pause()
    $iPause = Not $iPause
    If $iPause Then
        ConsoleWrite('Script is pausing' & @CRLF)
    Else
        ConsoleWrite('Script is unpausing' & @CRLF)
    EndIf
    While $iPause
        Sleep(100)
    WEnd
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Kaster
Поясни пожалуйста выражение :
Kaster [?]
Это конечно азы логики , наверное , но мне малопонятен и интересен его смысл.

Уже понял:
Происходит чередование 0-1-0-1 (переприсвоение)
 
Автор
C

Can

Новичок
Сообщения
59
Репутация
1
Как-то кривовато работает, и то, после того, как я удалил строку

Func _Exit()
ConsoleWrite('Exiting' & @CRLF)
Exit
EndFunc

Все равно спасибо, может еще версии будут?
С уважением...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
gregaz
любое ненулевое число при неявное преобразование это - True
а нуль - False
если к числам применять логические операции, то именно такое неявное преобразование и происходит
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Can [?]
Все равно спасибо, может еще версии будут?

Вот так можно :
Код:
HotKeySet ( "{ESC}" ,"_Exit")
HotKeySet('!p', '_Pause'); Alt+p
Global $iPause = 0
Global $i,$p,$r

While 1 
Sleep(270)
If Not IsInt($iPause/2) Then ContinueLoop
   Cycle1()
   Cycle2()
   Cycle3()
WEnd

Func Cycle1()
   $i = 0
   While $i <= 2
      PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
      ;If $iPar1=1 Then    $i=0  
      If Not @error Then
         MouseClick("left", 213, 528, 2, 5)
         
         $i=0
      Else
         MouseClick("left", 713, 528, 2, 5)
         
         Cycle3()
      EndIf 
      Sleep(50)
      $i = $i + 1   
      ConsoleWrite('Cycle1 ' & $i & @LF)
   WEnd
EndFunc
;..............................
Func Cycle2()
;..............................
Func Cycle3()
;.............................

Func _Pause()
   $iPause +=1
EndFunc




Добавлено:
Сообщение автоматически объединено:

Kaster,Спасибо
Уже дошло
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Can
ты говоришь невероятные вещи. ты всего лишь удалил одну из функций, которая была забита на клавишу Esc. на работу основного кода это никак не влияет.
Can [?]
Все равно спасибо, может еще версии будут?
я бы тебе порекомендовал разобраться сначала с этим примером в купе со своим кодом, чем искать другие "работающие" варианты, но относительно работы которых имеешь смутное представление, т.к. дальше можно только усложнять.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Надо добавить пропущенную тобой ф-ию:
Код:
Func _Exit()
    ConsoleWrite('Exiting' & @CRLF)
    Exit
EndFunc



Добавлено:
Сообщение автоматически объединено:

Kaster [?]
я бы тебе порекомендовал разобраться сначала с этим примером в купе со своим кодом,
Полностью разделяю.
Пример паузы Кастера мне очень понравился.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Kaster [?]
довольно громко сказано
grin.gif

учитывая что пример взят из справки
Значит почаще в справку надо заглядывать.
Просто я всегда пользовался своим методом , а этот мне показался элегантее.
 
Верх