Что нового

Интервал работы программы

TorNeo

Новичок
Сообщения
21
Репутация
0
Пытаюсь написать скрипт, который после моего ухода с работы должен запускать рдп и перед приходом - включает его. Тестирую для простоты на блокноте

Код:
$RDP = "notepad.exe"

While 1
If @HOUR  >=  19 AND @MIN  >= 10 AND (Not ProcessExists($RDP)) Then
$iPID = Run($RDP)
Else
If @HOUR >= 09 AND @MIN >= 45 AND (ProcessExists($RDP)) Then ProcessClose($iPID)
EndIf
WEnd


отказывается работать ( Просто запускается скрипт и тишина ... ошибки не лезут
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Для ускорения теста время искуственно ускорено вот таким вполне работающим скриптом (заодно в стиле порядок наведён, но и без этого всё работало).
Код:
$sRDP = "notepad.exe"
While 1
    If Mod(@SEC, 10) = 0 And (Not ProcessExists($sRDP)) Then
        $iPID = Run($sRDP)
    ElseIf Mod(@SEC, 10) = 5 And (ProcessExists($sRDP)) Then
        ProcessClose($iPID)
    EndIf
WEnd

Cовершенно непонятно, зачем так обзывать самый обычный notepad.exe.
 
Последнее редактирование:
Автор
T

TorNeo

Новичок
Сообщения
21
Репутация
0
Cовершенно непонятно, зачем так обзывать самый обычный notepad.exe.
компук не особо шустрый, и чтобы его в очередной раз не повесить при зацикливании скрипта - решил тестировать на блокноте. Так надежнее )))

но и без этого всё работало).
тогда это просто мистика какая-то (((

если я прописывал If Not ProcessExists($sRDP) Then, то работало без проблем, но мне же нужна проверка по времени, а с ней скрипт отказывался работать (
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Ещё в логике этого скрипта для меня странными выглядят попытки "ломиться в открытую дверь". Можно же без этого обойтись.
Код:
$sRDP = "notepad.exe"
While 1
    Do
        Sleep(5000)
    Until @HOUR >= 19 And @MIN >= 10
    $iPID = Run($sRDP)
    Do
        Sleep(5000)
    Until @HOUR >= 9 And @MIN >= 45
    If ProcessExists($sRDP) Then
        ProcessClose($iPID)
    EndIf
WEnd
Или, если надо перестраховаться на случай того, что процесс убьётся преждевременно, то логичнее это отслеживать вот так.
Код:
$sRDP = "notepad.exe"
While 1
    Do
        Sleep(5000)
    Until (@HOUR = 19 And @MIN >= 10) Or @HOUR > 19 Or @HOUR < 9 Or (@HOUR = 9 And @MIN < 45)
    $iPID = Run($RDP)
    Do
        Sleep(5000)
    Until (@HOUR >= 9 And @MIN >= 45) Or ProcessExists($RDP) = 0
    If ProcessExists($RDP) Then
        ProcessClose($iPID)
    EndIf
WEnd
 
Последнее редактирование:
Автор
T

TorNeo

Новичок
Сообщения
21
Репутация
0
Или, если надо перестраховаться на случай того, что процесс убьётся преждевременно, то логичнее это отслеживать вот так.
А как перестраховаться от того, что процесс уже запущен ? К примеру, кто-то из коллег попросил дать доступ к файлам компа. Я запускаю рдпшку и забываю ее закрыть, убегаю с работы и у меня запускается вторая копия программы. Если честно не тестировал, запустится ли вторая копия энидеска, но все же ...
 

Oki

Продвинутый
Сообщения
452
Репутация
62
А как перестраховаться от того, что процесс уже запущен ? К примеру, кто-то из коллег попросил дать доступ к файлам компа. Я запускаю рдпшку и забываю ее закрыть, убегаю с работы и у меня запускается вторая копия программы. Если честно не тестировал, запустится ли вторая копия энидеска, но все же ...
Код:
$sRDP = "notepad.exe"
While 1
    Do
        Sleep(5000)
    Until (@HOUR = 19 And @MIN >= 10) Or @HOUR > 19 Or @HOUR < 9 Or (@HOUR = 9 And @MIN < 45)
    If ProcessExists($RDP) = 0 Then
        $iPID = Run($RDP)
    EndIf
    Do
        Sleep(5000)
    Until (@HOUR >= 9 And @MIN >= 45) Or ProcessExists($RDP) = 0
    If ProcessExists($RDP) Then
        ProcessClose($iPID)
    EndIf
WEnd
 

IMStrelcov

CTPEJIbLLOB
Сообщения
258
Репутация
66
Код:
Until (@HOUR = 19 And @MIN >= 10) Or @HOUR > 19 Or @HOUR < 9 Or (@HOUR = 9 And @MIN < 45)
;если
@HOUR = 19
@MIN = 5
;тоже сработает, а в примере 19:10

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

Я вижу это так:
Для теста - так как время имитируется не хитрым способом для проверки механизма скрипта и ведется вывод в консоль.
Код:
;если процесс уже запущен, то повторного запуска не будет
;если процесс закрыть в то время когда он должен выполняться, то будет повторный запуск процесса
;если скрипт работает и запустить процесс в то время когда он не должен выполняться, то скрипт его закроет

$sProc = 'notepad.exe'

;тут часы умножаю на 100, чтобы приплюсовав минуты время было верным числом
;т.е. 19 часов + 1 минута = 20, так не понятно минуты или часы
;а помножив часы на 100 19:01 будет 1901
;или 9:11 тоже будет 20, а помножив, 911
;возможно это лишнее, но так удобней следить за временем

$iTimeRun = (19*100)+10        ;время запуска 19 часов, 10 минут
$iTimeClose = (9*100)+45    ;время закрытия 09 часов, 45 минут
$iTime = 0

While 1
   $iTime += 1
   If $iTime > 2359 Then $iTime = 0
   $iRun = ProcessExists($sProc)
   If Not $iRun Then
      If (($iTime >= $iTimeRun) And ($iTime <= 2359)) Or (($iTime >= 0) And ($iTime < $iTimeClose)) Then
         $iRun = Run($sProc)
         ConsoleWrite('Время: '& $iTime& @TAB& 'Run: '& @TAB& $sProc& @CRLF)
         Sleep(1000)
      EndIf
   ElseIf ($iTime >= $iTimeClose) And ($iTime < $iTimeRun) Then
      ProcessClose($iRun)
      ConsoleWrite('Время: '& $iTime& @TAB& 'Close: '& @TAB& $sProc& @CRLF)
      Sleep(1000)
   EndIf
WEnd

Для выполнения - тут время реальное как должно и вывода в консоль нет.
Код:
;если процесс уже запущен, то повторного запуска не будет
;если процесс закрыть в то время когда он должен выполняться, то будет повторный запуск процесса
;если скрипт работает и запустить процесс в то время когда он не должен выполняться, то скрипт его закроет

$sProc = 'notepad.exe'

;тут часы умножаю на 100, чтобы приплюсовав минуты время было верным числом
;т.е. 19 часов + 1 минута = 20, так не понятно минуты или часы
;а помножив часы на 100 19:01 будет 1901
;или 9:11 тоже будет 20, а помножив, 911
;возможно это лишнее, но так удобней следить за временем

$iTimeRun = (19*100)+10        ;время запуска 19 часов, 10 минут
$iTimeClose = (9*100)+45    ;время закрытия 09 часов, 45 минут

While Sleep(1000)
   $iTime = (@HOUR*100)+@MIN
   $iRun = ProcessExists($sProc)
   If Not $iRun Then
      If (($iTime >= $iTimeRun) And ($iTime <= 2359)) Or (($iTime >= 0) And ($iTime < $iTimeClose)) Then
         $iRun = Run($sProc)
      EndIf
   ElseIf ($iTime >= $iTimeClose) And ($iTime < $iTimeRun) Then
      ProcessClose($iRun)
   EndIf
WEnd
 
Последнее редактирование:
Верх