Что нового

Закрытие одного скрипта из другого

ED15AF

Новичок
Сообщения
3
Репутация
0
Есть необходимость проверять какие скрипты запущены,а так же некоторые из них в определенное время закрывать.
Скрипты запускаются отдельно друг от друга.
Вариант с запуском их из одного для их контроля не подходит.
Некоторые не содержат оконных форм.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Есть два способа:
1. Отлавливать скрипты по именам процессов. Но работает только для откомпилированных скриптов.
Код:
If ProcessExists('script1.exe.') Then ProcessClose('script1.exe.')

2. Даже если у скрипта нет окна, для него можно выставить заголовок, и с помощью него отлавливать через WinExists. Этот способ работает даже для нескомпиллированных скриптов.
Код:
AutoItWinSetTitle('волшебный заголовок')
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ED15AF
Можно так попробовать:
Код:
#include <Misc.au3>

Opt('TrayMenuMode', 1)

_Singleton(@ScriptName)

If @Compiled Then
	_RegRun() ;прописываем себя в автозагрузку
EndIf

HotKeySet('^{3}', '_Exit')
TraySetToolTip('Ctrl+3 - выход')
AdlibRegister('_MyProcessesCheck', 300000);проверяем каждые 5 минут

While 1
	Sleep(100)
WEnd

Func _MyProcessesCheck()
	Local $iPID
	Local $aProcesses[5][4] = [[4],['script1.exe', 'C:\Program Files\папка1\', 9, 17], _
			['script2.exe', 'C:\Program Files\папка2\', 10, 18], _
			['script3.exe', 'C:\Program Files\папка3\', 11, 19], _
			['script4.exe', 'C:\Program Files\папка4\', 12, 20]]
	#cs
		$aProcesses[0][0] - кол-во процессов, за которыми будем следить
		$aProcesses[n][0] - имя процесса
		$aProcesses[n][1] - путь к процессу
		$aProcesses[n][2] - время(час), с которого процесс должен работать
		$aProcesses[n][3] - время(час), с которого процесс должен прекратить работу
	#ce
	For $i = 1 To $aProcesses[0][0]
		If @HOUR >= $aProcesses[$i][2] And @HOUR < $aProcesses[$i][3] Then
			If Not ProcessExists($aProcesses[$i][0]) Then
				$iPID = Run($aProcesses[$i][1] & $aProcesses[$i][0])
				If $iPID Then
					ConsoleWrite('Процесс ' & $aProcesses[$i][0] & ' запущен.' & @CR)
					TrayTip('Мои процессы', 'Процесс ' & $aProcesses[$i][0] & ' запущен.', 3, 1)
					Sleep(1000)
				Else
					ConsoleWrite('Не удалось запустить процесс ' & $aProcesses[$i][0] & @CR)
					TrayTip('Мои процессы', 'Не удалось запустить процесс ' & $aProcesses[$i][0], 3, 3)
					Sleep(1000)
				EndIf
			EndIf
		Else
			If ProcessExists($aProcesses[$i][0]) Then
				If ProcessClose($aProcesses[$i][0]) Then
					ConsoleWrite('Процесс ' & $aProcesses[$i][0] & ' закрыт' & @CR)
					TrayTip('Мои процессы', 'Процесс ' & $aProcesses[$i][0] & ' закрыт', 3, 1)
					Sleep(1000)
				Else
					ConsoleWrite('Не удалось закрыть процесс ' & $aProcesses[$i][0] & @CR)
					TrayTip('Мои процессы', 'Не удалось закрыть процесс ' & $aProcesses[$i][0], 3, 3)
					Sleep(1000)
				EndIf
			EndIf
		EndIf
	Next
EndFunc   ;==>_MyProcessesCheck

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _RegRun()
	Local $sRegRun = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'
	If Not RegRead($sRegRun, @ScriptName) Or _
			RegRead($sRegRun, @ScriptName) <> '"' & @ScriptFullPath & '"' Then
		RegWrite($sRegRun, @ScriptName, 'REG_SZ', '"' & @ScriptFullPath & '"')
	EndIf
EndFunc   ;==>_RegRun
 
Верх