1

Тема: AHK: Process Exist

В общем то надумал создать скрипт контроля процесса. Порылся поглядел команды и нашел Process.
И вот тут появились вопросы, что я не так делаю?
Вот код который я надумал:

Loop,
{
Process, Exist, 1.exe
	if ErrorLevel=0
	{
	Sleep, 5000
	}
	else
	{
	run, %A_ScriptDir%\1.exe
	Sleep, 5000
	}
}
return,

Суть следующая: Проверяется существует ли процесс или нет. Если нет - запускает его. Но видимо я не правильно понял и что то не так намудрил=(

2

Re: AHK: Process Exist

А какие ошибки? В чем не корректность работы скрипта?

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

3

Re: AHK: Process Exist

Loop
   {
      Process, Exist, 1.exe
         If !ErrorLevel
            {
               Run, %A_ScriptDir%\1.exe
               Sleep, 5000
            }
         Else
            Sleep, 5000
   }
Return

4 (изменено: alexii, 2011-07-28 20:20:54)

Re: AHK: Process Exist

Прекрасно работает. Только вот я не пойму почему восклицательный знак и нет равенства?

5

Re: AHK: Process Exist

Восклицательный знак - это логическое отрицание, не так ли?

6

Re: AHK: Process Exist

DaVinchi, избегайте излишнего цитирования. Я поправил Ваш пост.

7

Re: AHK: Process Exist

А можно ссылку где это можно почитать? А то я или не внимательно читал или не видел этого еще.

8

Re: AHK: Process Exist

Цитата:
Логическое НЕ (!). Если операнд пуст или равен 0

9

Re: AHK: Process Exist

Писал такой скрипт для себя.
Запускает Программу №2, если запускается Программа №1.
Описание в самом скрипте.

;~ *** Скрипт запускает Tool_2_ при старте Tool_1_
;~ *** Опционально следит за состоянием Tool_2_ и не дает ему закрыться во время работы Tool_1_
;~ *** Путь к Tool_2_ настраивается через переменную Tool_2__Path

;~ *** НАСТРОЙКИ

;~ Если перемнная Tool_2__Guard=1, скрипт следит за состоянием Tool_2_.
;~ Если по каким-либо причинам Tool_2_ закрывается, то скрипт запускает его вновь
;~ Т.е. скрипт не будет давать закрываться Tool_2_ во время открытого Tool_1_.
;~ Если перемнная Tool_2__Guard=0, то Tool_2_ будет запускаться только при старте Tool_1_.
;~ Во время работы Tool_1_, скрипт не будет вновь запускать Tool_2_, если он закроется.
   Tool_2__Guard:=1

;~ Если переменная Close_Tool_2_=1, то Tool_2_ будет закрываться вместе с Tool_1_
   Close_Tool_2_:=1

;~ Раскомментируйте следующую строку, что бы убрать иконку из трея
;~ В этом случае скрипт можно будет завершить через диспетчер задач
   ;~ #NoTrayIcon

;~ Укажите путь к Tool_2_
   Tool_2__Path:="C:\Tool_2_.exe"

;~ Имя процесса Tool_2_
   Tool_2_:="Tool_2_.exe"

; Имя процесса Tool_1_
Tool_1_:="Tool_1_.exe" 

;~ ДАЛЕЕ НЕ РЕДАКТИРОВАТЬ

#SingleInstance, force ; перезапускать скрипт, если он уже запущен
SetBatchLines, -1 ; быстрое выполнение команд
DetectHiddenWindows, on ; обнаружение скрытых окон

Path:=RegExReplace(Tool_2__Path, "(.*)\\(.*)", "$1")
Target:=RegExReplace(Tool_2__Path, "(.*)\\(.*)", "$2")
If Tool_2__Guard ; если надо следить за состоянием процесса Tool_2_
   SetTimer, Tool_2__Guard, 2000 ; запускаем таймер каждые 2 сек


Loop ; зацикливаем скрипт
{
   Process, wait, %Tool_1_% ; ждем появления процесса Tool_1_
   
   Process, Exist, %Tool_2_% ; проверяем процесс Tool_2_
   If !ErrorLevel ; если не запущен
      Run % "" Target "", %Path% ; запускаем
   
   Process, WaitClose, %Tool_1_% ; ждем закрытия процесса Tool_1_
   
   If !Close_Tool_2_ ; если не разрешено закрвать Tool_2_ при выходе из Tool_1_
      continue ; не выполняем остальные команды
   
   Process, Exist, %Tool_2_% ; проверяем состояние Tool_2_
   If (PID:=ErrorLevel) ; если запущен, записываем его PID
      Loop ; в цикле ждем закрытия Tool_2_ (для надежного закрытия Tool_2_, бывает не закрывается)
      {
         WinKill, ahk_pid %PID% ; закрываем Tool_2_
         WinWaitClose, ahk_pid %PID%,, 1 ; ждем 1 сек
         If !ErrorLevel ; если Tool_2_ закрыт
            break ; выходим из цикла
      }
}


Tool_2__Guard: ; таймер
   Process, Exist, %Tool_1_% ; проверяем состояние Tool_1_
   If !ErrorLevel ; если не запущен
      return ; пропускаем остальные действия
   
   Process, Exist, %Tool_2_% ; проверяем состояние Tool_2_
   If !ErrorLevel ; если на запущен
      Run % "" Target "", %Path% ; запускаем
return