#include <WinAPIEx.au3>
Global $iPouse = 5 ;пауза в секундах между проверками
HotKeySet("{ESC}", "_MyExit") ;Esc - выход
AdlibRegister('WaitProcessKilled', $iPouse * 1000)
While 1
Sleep(10)
WEnd
Func WaitProcessKilled()
Local $aProcessList, $sPath, $i
Local $sProcessParent = 'process1.exe' ;основной процесс
Local $sProcessChild = 'process2.exe'; дочерний процесс
Local $sPathChild = @ProgramFilesDir & '\Folder\' & $sProcessChild ;путь к файлу дочернего процесса
If Not ProcessExists($sProcessParent) Then ;если нет основного процесса
$aProcessList = ProcessList($sProcessChild);получаем массив дочерних процессов
If $aProcessList[0][0] Then ;если есть дочерние процессы
For $i = 1 To $aProcessList[0][0]
$sPath = _WinAPI_GetModuleFileNameEx($aProcessList[$i][1]);определяем путь к дочернему процессу
If StringInStr($sPath, '~') Then ;если функция вернула короткий путь
$sPathChild = FileGetShortName($sPathChild) ;преоразовываем заданный путь в короткий
EndIf
If $sPath = $sPathChild Then ;если путь к файлу дочернего процесса совпадает с заданным
_MyFunc1()
ExitLoop
EndIf
Next
Else ;если нет дочерних процессов
_MyFunc2()
EndIf
Else ;если есть основной процесс
_MyFunc3()
EndIf
EndFunc ;==>WaitProcessKilled
Func _MyFunc1()
TrayTip('Test', 'Нет основного процесса.' & @CRLF & 'Есть дочерний процесс.', 3, 17)
EndFunc ;==>_MyFunc1
Func _MyFunc2()
TrayTip('Test', 'Нет основного процесса.' & @CRLF & 'Нет дочернего процесса.', 3, 17)
EndFunc ;==>_MyFunc2
Func _MyFunc3()
TrayTip('', '', 0)
EndFunc ;==>_MyFunc3
Func _MyExit()
Exit
EndFunc ;==>_MyExit