#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $f
$Form1 = GUICreate("Form1", 456, 147, 192, 124)
Global $Progress1 = GUICtrlCreateProgress(24, 40, 406, 17)
Global $Button1 = GUICtrlCreateButton("старт", 32, 88, 75, 25)
Global $Button2 = GUICtrlCreateButton("рестарт", 344, 88, 75, 25)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_start()
EndSwitch
WEnd
Func _start()
For $i = 1 To 100
GUICtrlSetData($Progress1, $i)
Sleep(50)
If $f Then
$i = 0
$f = 0
EndIf
Next
GUICtrlSetData($Progress1, '')
EndFunc ;==>_start
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0xFFFF)
Switch $nNotifyCode
Case 0
Switch $nID
Case $Button2
$f = 1
EndSwitch
EndSwitch
Return 'GUI_RUNDEFMSG'
EndFunc ;==>WM_COMMAND
а куда тут свой код пихать?_)joiner сказал(а):весьма примерно так
Код:#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $f $Form1 = GUICreate("Form1", 456, 147, 192, 124) Global $Progress1 = GUICtrlCreateProgress(24, 40, 406, 17) Global $Button1 = GUICtrlCreateButton("старт", 32, 88, 75, 25) Global $Button2 = GUICtrlCreateButton("рестарт", 344, 88, 75, 25) GUISetState() GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 _start() EndSwitch WEnd Func _start() For $i = 1 To 100 GUICtrlSetData($Progress1, $i) Sleep(50) If $f Then $i = 0 $f = 0 EndIf Next GUICtrlSetData($Progress1, '') EndFunc ;==>_start Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam) Local $nNotifyCode = BitShift($wParam, 16) Local $nID = BitAND($wParam, 0xFFFF) Switch $nNotifyCode Case 0 Switch $nID Case $Button2 $f = 1 EndSwitch EndSwitch Return 'GUI_RUNDEFMSG' EndFunc ;==>WM_COMMAND
а вообще, нужно смотреть каждый случай конкретно
это идеально подходит, а есть пример реализации?)uritalex сказал(а):Если смысл в перезапуске скрипта с заменой данных то самый простой вариант это сделать запускающий скрипт. Запускающий скрипт запускает основной, запоминает PID процесса запущенного скрипта и при получении команды просто завершает запущенный процесс с последующим перезапуском.
HotKeySet("{F2}", "Start")
HotKeySet("{F4}", "Stop")
HotKeySet("{F3}", "MyExit")
Global $pid
While 1
Sleep(10)
WEnd
Func Start()
; $pid = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
; $pid = Run("1.exe","@ScriptDir")
$pid = Run(@ScriptDir & "1.exe")
EndFunc
Func Stop()
ProcessClose($pid)
EndFunc
Func MyExit()
Exit
EndFunc
не работает
HotKeySet("{F2}", "Start")
HotKeySet("{F4}", "Stop")
Global $pid
While 1
Sleep(1000)
WEnd
Func Start()
$pid = Run("1.exe")
EndFunc
Func Stop()
ProcessClose($pid)
EndFunc
HotKeySet("{F4}", "_Restart")
HotKeySet("{F5}", "_Stop")
While 1
Global $sPID = Run("Скрипт.exe")
Sleep (10000)
While 1
If ProcessExists($sPID) Then
Sleep (5000) ; 5 сек
Else
ExitLoop
EndIf
WEnd
Sleep (5000)
WEnd
Func _Restart()
ProcessClose($sPID)
EndFunc
Func _Stop()
ProcessClose($sPID)
Sleep (500)
Exit
EndFunc
Блокнот запускает, а прогу нет.
$pid = Run("1.exe",@ScriptDir) ; кавычки у @ScriptDir не нужны
$pid = Run(@ScriptDir & "\1.exe") ; нужен обратный слэш перед 1.exe
Лежит в той же директории
$pid = Run("1.exe") ; этого достаточно
If $CmdLineRaw Then ProcessWaitClose($CmdLineRaw)
HotKeySet("{F4}", "_Restart")
; Здесь творим, что хотим...
;~ While 1
;~ Sleep(200)
;~ WEnd
Func _Restart()
;~ ... Здесь необходимо предусмотреть закрытие ВОЗМОЖНО открытых библиотек, требующих этого, очистку ресурсов и т.п.
;~ ...
Run(@ScriptFullPath & ' ' &@AutoItPID)
Exit
EndFunc
HotKeySet("{F4}", "_Restart")
While 1 ;1-й цикл
; тут делаем выбор или ввод параметров
While 1 ; 2-й цикл
;Тут выполняем обработку
Wend
Wend
Func _Restart()
;~ ... Здесь делаем выход из второго While
EndFunc
Интересно посмотреть, как вы это будете делать?uritalex сказал(а):Код:Func _Restart() ;~ ... Здесь делаем выход из второго While EndFunc
Можно создать переменную и в цикле условие выхода по значению этой переменнойИнтересно посмотреть, как вы это будете делать?
HotKeySet("{F4}", "_Restart")
$ExitWhile=0
While 1 ;1-й цикл
; тут делаем выбор или ввод параметров
While 1 ; 2-й цикл
;Тут выполняем обработку
If $ExitWhile Then ;Здесь выход по условию
$ExitWhile=0
ExitLoop
EndIf
Wend
Wend
Func _Restart()
;~ ... Здесь делаем выход из второго While
$ExitWhile=1
EndFunc
HotKeySet("{F4}", "_Restart")
$sRest = 0
While 1
; добавление данных
While 1
; тут сам скрипт и по тексту скрипта проставил
If $sRest = 1 Then ExitLoop ; ExitLoop ставим нужного уровня если есть другие циклы
Wend
Wend
Func _Restart()
$sRest = 1
EndFunc
только нужно ещё вернуть переменной "$sRest" значение "0" до выхода из цикла, иначе при следующем входе в цикл скрипт сразу из него и выйдет.Код:If $sRest = 1 Then ExitLoop
While 1
; добавление данных
While 1
$sRest = 0
; тут сам скрипт и по тексту скрипта проставил
If $sRest = 1 Then ExitLoop ; ExitLoop ставим нужного уровня если есть другие циклы
Wend
Wend
... если у автора самого ...saloma сказал(а):а куда тут свой код пихать?_)
saloma сказал(а):Имеется скрипт, с кучей циклов внутри.