Что нового

[Автоматизация] Автоматический перезапуск скрипта по заврешнению

Fallen

Новичок
Сообщения
39
Репутация
0
Доброго времени суток, всем. Прошу извинить, что отнимаю ваше время подобными темами, но работая в программе у меня возник небольшой вопрос, как перезапустить скрипт после завершения?
Код:
WinWaitActive("Epoch of Shadows")
Send("tare dekavo")
Send("{ENTER}")
Sleep(3000)
Вот такой вот скрипт. Он быстро завершается и мне приходится запускать его заного - руками.. Ну и смежный вопрос, как запустить этот же скрипт на выполнение n-ного количества раз?
Вообще мне нужно что бы он повторялся 30 раз, но при условии лагов и плохого соединения, выходит 32-33. До этого решал это проблему копи-пастом =)
 

miron50

Новичок
Сообщения
6
Репутация
0
Код:
Run (@AutoItExe & "")
это чтобы он сам себя стартовал

Еще можно в цикле твой код крутить
 
Автор
F

Fallen

Новичок
Сообщения
39
Репутация
0
это чтобы он сам себя стартовал
Еще можно в цикле твой код крутить
Попробовал первый вариант, не прокатывает получается почему то.. Можно простейший пример, как прокрутить его в цикле бесконечном? Вообще очень удивлен что нет простой командый типа - restart или do n...loop.. Буду очень благодарен за помощь.
Про For - почитал, ничего не понял, как при помощи него решить свою проблему, но на то это и форум для новичков =) Что бы помочь разобраться =)
Спасибо за ответы, надеюсь на вашу помощь

П.С. Вот то, до чего додумался сам

Код:
$i=0
    Do
    Send ("tare dekavo")
    Send ("{Enter}")
    Sleep (2000)
    $i = $i + 1
Until $i = 33

Так он будет выполняться 33 раза перед завершением. Я мог бы конечно поставить 999 и это было бы почти бесконечно =) Но все же уже хотелось бы из принципа разобраться, что да как =)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Fallen
Код:
While True

Кликните по первому слову.

Код:
Until False

Или так.

Код:
While True
    Send ("tare dekavo")
    Send ("{Enter}")
    Sleep (2000)
WEnd

Код:
Do
    Send ("tare dekavo")
    Send ("{Enter}")
    Sleep (2000)
Until False
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Fallen [?]
Вообще мне нужно что бы он повторялся 30 раз, но при условии лагов и плохого соединения, выходит 32-33.

Код:
OnAutoItExitRegister('_AdlibUnRegister')

Global $iExit = 1
; Для выхода из программы нажмите ESC
HotKeySet('{ESC}', '_Exit')
AdlibRegister('_EpochShadows', 3000)

While 1
	Sleep(250)
WEnd

Func _EpochShadows()
	
	If $iExit > 33 Then Exit
	WinWaitActive("Epoch of Shadows")
	Send("tare dekavo")
	Send("{ENTER}")
	$iExit +=1
EndFunc;==>_EpochShadows

Func _Exit()
	Exit
EndFunc;==>_Exit

Func _AdlibUnRegister()
	AdlibUnRegister('_EpochShadows')
EndFunc;==>_AdlibUnRegister
 
Автор
F

Fallen

Новичок
Сообщения
39
Репутация
0
Firex, спасибо =) Т.е. что бы сделать повторение бесконечным, мы просто ставим цикл без условия, точнее условие, которое всегда верно =)

Garrett Большое спасибо, но если честно, слабо понял смысл.. Сейчас попробую закомментировать то, до чего дошел, а вы уж если что, меня поправьте.

Код:
OnAutoItExitRegister('_AdlibUnRegister') ;; Регистрируем функцию выполняемую по завершению скрипта

Global $iExit = 1 ; Назначаем глобальную переменную
; Для выхода из программы нажмите ESC
HotKeySet('{ESC}', '_Exit')
AdlibRegister('_EpochShadows', 3000) ; Регистрируем функцию проверки по времени (3 секунды)

While 1
    Sleep(250)  ; Вот смысла этого не понял. Очень часто вижу во многих примерах, но не понял, какова его функция =)
WEnd

Func _EpochShadows()
    
    If $iExit > 33 Then Exit ; Если значение переменной выше 33 - завершение выполнения скрипта
    WinWaitActive("Epoch of Shadows")
    Send("tare dekavo")
    Send("{ENTER}")
    $iExit +=1 ; Если не ошибаюсь - увеличиваем значение переменной на +1
EndFunc;==>_EpochShadows ; Завершаем функцию

Func _Exit()
    Exit
EndFunc;==>_Exit

Func _AdlibUnRegister() ; Отменяет регистрацию адлиб функции - тоже плохо понял, зачем тогда ;;;было регистрировать адлиб.. =(
    AdlibUnRegister('_EpochShadows')
EndFunc;==>_AdlibUnRegister
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Fallen
но если честно, слабо понял смысл

Код:
; Регистрируем функцию которая будет выполняться по завершению программы Exit
OnAutoItExitRegister('_AdlibUnRegister')
; Глобальная переменная содержит счётчик циклов
Global $iExit = 1

; Принудительное прерывание программы ESC
HotKeySet('{ESC}', '_Exit')
; Регистрируем функцию которая будет выполняться циклично, а именно $Exit - раз через каждые 3 сек
AdlibRegister('_EpochShadows', 3000)

; Основной цикл программы. 
; Ставим Sleep(250)  дабы не сильно нагружать ЦП
While 1
	Sleep(250)
WEnd

; Функция ради которой всё затевалось
Func _EpochShadows()
	
	If $iExit > 33 Then Exit
	
	WinWaitActive("Epoch of Shadows")
	Send("tare dekavo")
	Send("{ENTER}")
	$iExit +=1
EndFunc;==>_EpochShadows

; Функция выхода для оператора HotKeySet
Func _Exit()
	Exit
EndFunc;==>_Exit

; Чистим хвосты (можно и не чистить).
; Функция деактивации основной функции (_EpochShadows)
Func _AdlibUnRegister()
	AdlibUnRegister('_EpochShadows')
EndFunc;==>_AdlibUnRegister
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Я бы немного по другому сделал.
Код:
Global $iNum, $iCount = 30
; Для выхода из программы нажмите ESC
HotKeySet('{ESC}', '_Exit')
AdlibRegister('_EpochShadows', 3000)

While $iNum < $iCount
	Sleep(250)
WEnd
AdlibUnRegister('_EpochShadows')

Func _EpochShadows()
	AdlibUnRegister('_EpochShadows')
	If Not WinWaitActive('Epoch of Shadows', '', 5) Then Exit 1
	Send('tare dekavo')
	Send('{ENTER}')
	$iNum += 1
	AdlibRegister('_EpochShadows', 3000)
EndFunc   ;==>_EpochShadows

Func _Exit()
	Exit
EndFunc   ;==>_Exit



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

Fallen,
Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[Автоматизация] Автоматический перезапуск скрипта по заврешнению" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Глобальный модератор.
 
Верх