Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как сделать,чтобы скрипт после запука,продолжил своё выполн в ЗАДАННОЕ мной время? (http://forum.oszone.net/showthread.php?t=132842)

sashadeg 23-02-2009 07:47 1046142

Как сделать,чтобы скрипт после запука,продолжил своё выполн в ЗАДАННОЕ мной время?
 
Например, я запустил скрипт, а он начал выполняться в 21:05 .... для этого есть специальня команда???

Creat0R 23-02-2009 10:39 1046238

Цитата:

Цитата sashadeg
для этого есть специальня команда? »

_NowTime()?


Код:

#include <Date.au3>

_ScheduleStart_Proc("21:05:00")

Func _ScheduleStart_Proc($sStartTime)
    While 1
        If _NowTime() = $sStartTime Then Return 1
        Sleep(100)
    WEnd
EndFunc


sashadeg 23-02-2009 11:53 1046299

Цитата:

Цитата Creat0R
#include <Date.au3> »

Что делает эта команда???

Creat0R 23-02-2009 12:09 1046315

Цитата:

Цитата sashadeg
Что делает эта команда? »

Подключает библиотеку для работы с датой и временем.

sashadeg 23-02-2009 12:12 1046320

Мда, капец, я скачал с инета русский справочник команд, ВЕСЬ выучил, НО стока нового от вас узнаю.... СПАСИБО ОГРОМНОЕ,,,,

leprecon 21-03-2009 23:55 1070695

А как сделать так, если компьютер был выключен в заданое время, то нужно чтобы скрипт продолжил работу при запуске компьютера.

Creat0R 22-03-2009 00:42 1070721

Цитата:

Цитата leprecon
нужно чтобы скрипт продолжил работу при запуске компьютера »

Записать его в автозапуск?

Код:

RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", @ScriptName, "REG_SZ", @ScriptFullPath)

leprecon 22-03-2009 00:51 1070733

нет, а если например ждал скрипт 21:05 но не дождался :), а комп включили на следующее утро в 9 утра, и что ему опять 21:05 ждать?

Creat0R 22-03-2009 01:46 1070754

Цитата:

Цитата leprecon
а если например ждал скрипт 21:05 но не дождался »

Ну тогда можно в начале скрипта (при его запуске) записать в автозапуск, и если скрипт выполнил что нужно в указанное время, то просто удалить запись из реестра.

amel27 22-03-2009 06:23 1070802

Цитата:

Цитата Creat0R
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", @ScriptName, "REG_SZ", @ScriptFullPath) »

а почему "RunOnce"?.. он же одноразовый - его придется создавать при каждом запуске
думаю скрипт будет проще, если использовать ключ "Run"

Цитата:

Цитата Creat0R
If _NowTime() = $sStartTime Then Return 1 »

Windows не является ОСью реального времени, поэтому логичней ставить ">=" вместо равенства... Тем более, если речь о возможной перезагрузке... Хотя на самом деле все сложней чем кажется. Предпложим, что комп выключили в "21:00:00" и включили на следующий день в 8:00 - время просрочено, а скрипт этого не сможет определить, выходов два: 1) задавать всегда точную дату/время; 2) сохранять где-нибудь время последнего запуска скрипта. Последний вариант уже напоминает полноценный шедулер с периодическим запуском (раз в год, раз в месяц, etc) и логикой анализа просроченных заданий. Первый вариант "одноразовый" и поэтому проще:
Код:

#include <Date.au3>

$sRegKey = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
$sRegVal = RegRead($sRegKey, @ScriptName)
If Not($sRegVal = @ScriptFullPath) Then RegWrite($sRegKey, @ScriptName, "REG_SZ", '"'& @ScriptFullPath &'"')

_ScheduleStart_Proc("2009","03","22","21","05","00")
RegDelete($sRegKey, @ScriptName)

Func _ScheduleStart_Proc($iYear, $iMonth, $iDay, $iHour, $iMinute, $iSecond)
    Local $tFileNow, $tFile=_Date_Time_EncodeFileTime($iMonth, $iDay, $iYear, $iHour, $iMinute, $iSecond)
    Local $pFileNow, $pFile=DllStructGetPtr($tFile)
    Do
        Sleep(100)
        $tFileNow = _Date_Time_EncodeFileTime(@MON, @MDAY, @YEAR, @HOUR, @MIN, @SEC)
        $pFileNow = DllStructGetPtr($tFileNow)
    Until _Date_Time_CompareFileTime($pFileNow, $pFile)>=0
EndFunc


Creat0R 22-03-2009 17:19 1071102

leprecon,
Сорри, я не так понял... можно при запуске с реестра добавить ком. строку, чтрбы скрипт её распознавал, и сразу выполнял нужные действия.

Цитата:

Цитата amel27
а почему "RunOnce"? »

Мне казалось что один раз нужно запустить скрипт (пока не выполнится событие).

Цитата:

Цитата amel27
логичней ставить ">=" вместо равенства »

Тогда скрипт запустится и после и до :)...

Меня вариант с точной проверкой ещё не подводил, простенький будильник на этой основе работает и будит меня :) - Но я согласен, этот вариант не самый лучший. Я свой пример привёл в качестве шаблона, не более.

Кстати, чтобы сильно не усложнять, вот так ещё можно:

Код:

#include <Date.au3>

_ScheduleStart_Proc("16:20:55")

Func _ScheduleStart_Proc($sStartTime)
    While 1
        $sNowTime = _NowTime()

        $sSeconds_Less = StringRight($sStartTime, 2) - 1
        $sSeconds_More = $sSeconds_Less + 2

        If $sSeconds_Less < 0 Then $sSeconds_Less += 59
        If $sSeconds_More = 60 Then $sSeconds_More = "00"

        If StringLen($sSeconds_Less) = 1 Then $sSeconds_Less = "0" & $sSeconds_Less
        If StringLen($sSeconds_More) = 1 Then $sSeconds_More = "0" & $sSeconds_More

        $sStartTime_Less
= StringTrimRight($sStartTime, 2) & $sSeconds_Less
        $sStartTime_More
= StringTrimRight($sStartTime, 2) & $sSeconds_More

        If ($sNowTime = $sStartTime) Or ($sNowTime >= $sStartTime_Less And $sNowTime <= $sStartTime_More) Then Return 1

        Sleep(100)
    WEnd
EndFunc

Но тут будет отклонение в секунду (назад и вперёд).

amel27 23-03-2009 04:39 1071578

Цитата:

Цитата Creat0R
Тогда скрипт запустится и после и до

не понял - вроде только после (само собой я имел ввиду числовой эквивалент)
Цитата:

Цитата Creat0R
тут будет отклонение в секунду (назад и вперёд) »

зачем изобретать, если вся терминология присутствует в штатном планировщике?.. мы можем только определить факт наступления события и получить время, прошедшее со времени его наступления и в зависимости от этого интервала решать, произошло оно в допустимый интервал времени или нет (т.е. является просроченным)
Цитата:

Цитата Creat0R
так ещё можно »

и все же пересечение границы суток не учитывается

ADD: и если секунд "00" получается $sSeconds_Less > $sSeconds_More ? :unsure:


Время: 15:09.

Время: 15:09.
© OSzone.net 2001-