Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для XXXler

Ветеран


Сообщения: 1073
Благодарности: 194

Профиль | Отправить PM | Цитировать


Нижеприведенная функция убивает все возможные окна от запущенного ей процесса и если какие-либо окна появлялись - перезапускает прогу заново (убиваются окна также дочерних процессов, просто одноименные окна\процессы не затрагиваются)

Код: Выделить весь код
;~ Пример запускает+закрывает setup.exe:
RunKillWin(@SystemDir&"\setup.exe")

;~ Использование:
;~ RunKillWin("Путь и имя файла"[, таймаут ожидания завершения выполнения exe(сек)][,количество попыток "тихого" выполнения])
;~ Возвращает количесто выполненых попыток

Func RunKillWin($Exe,$MaxTimeOutForProcess=300,$MaxCountToReRun=10)
Local $i,$PID,$Timer,$WinArr,$y,$z=0

For $i=1 To $MaxCountToReRun

	;~ Корявая поверка необходимости перезапуска
	If $z=1 Then ExitLoop
	$z=1
	
	$PID=Run($Exe)
	;~ Запуск таймера таймаута выполнения
	$Timer=TimerInit()
		
	While ProcessExists($PID)

		;~ Сверка таймера
		If TimerDiff($Timer)>$MaxTimeOutForProcess*1000 Then
			ProcessClose($PID)
			If Not(ProcessWaitClose($PID,30)) Then Return -1
			$z=0
			ContinueLoop 2
		EndIf
		
		$WinArr=WinList()
		For $y=1 To $WinArr[0][0]
			If Not(WinGetProcess($WinArr[$y][1])=$PID) Then ContinueLoop
			;~ Собственно действие над окном\доп. проверку его титла можно поменять здесь
			WinKill($WinArr[$y][1])
			$z=0
		Next
		
	WEnd
	
Next
Return $i-1
EndFunc

Отправлено: 03:08, 04-11-2006 | #439