Имя пользователя:
Пароль:
 

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

Пользователь


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

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


Защита от повторного запуска
P.S. Просьба, не тестировать этот скрипт из редактора.
Код: Выделить весь код
$objService=ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
$colProc=$objService.ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE '%" & @ScriptName & "%'")
If $colProc.Count > 1 Then
    Msgbox(0+48,"Совпадений: " & $colProc.Count,"Скрипт уже запущен")
    Exit(1)
EndIf
;~ --== Здесь должен быть код Вашего скрипта ==--
Отслеживание вновь запущенных процессов:
Код: Выделить весь код
$strComputer = "." 
$objWMIService = ObjGet("winmgmts:" & _ 
"{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2") 
$colMonitoredProcesses=$objWMIService.ExecNotificationQuery("select * from __instancecreationevent " & _  
" within 1 where TargetInstance isa 'Win32_Process'") 
While 1
$objLatestProcess = $colMonitoredProcesses.NextEvent 
MsgBox(0,"Обнаружен запуск",$objLatestProcess.TargetInstance.Name)
WEnd
Отслеживание завершающихся процессов:
Код: Выделить весь код
$strComputer = "." 
$objWMIService = ObjGet("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2") 
$colMonitoredProcesses = $objWMIService.ExecNotificationQuery("select * from __instancedeletionevent " _  
& "within 1 where TargetInstance isa 'Win32_Process'") 
While 1
$objLatestProcess = $colMonitoredProcesses.NextEvent 
MsgBox(0,"Обнаружено завершение",$objLatestProcess.TargetInstance.Name)
WEnd
Отследить запуск определённого процесса:
Код: Выделить весь код
$process='notepad.exe'
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$objEvents = $objWMIService.ExecNotificationQuery _
("SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName = '" & $process & "'")
MsgBox(0,"","Ожидание событий ...")
While 1
    $objReceivedEvent = $objEvents.NextEvent
    MsgBox(0,"",$process & " запущен")
WEnd
Отследить завершение определённого процесса:
Код: Выделить весь код
$process='notepad.exe'
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$objEvents = $objWMIService.ExecNotificationQuery _
("SELECT * FROM Win32_ProcessStopTrace WHERE ProcessName = '" & $process & "'")
MsgBox(0,"","Ожидание событий ...")
While 1
    $objReceivedEvent = $objEvents.NextEvent
    MsgBox(0,"",$process & " завершён")
WEnd
А этот скрипт я как-то писал для отслеживания вируса по его PID (долгая история...)
С его помощью можно определить, какие программы запускали на компьютере в ваше отсутствие,
остаётся только перенаправить информацию в текстовой файл...
Код: Выделить весь код
#Include <date.au3>
$strComputer = "." 
$objWMIService = ObjGet("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2") 
$colMonitoredProcesses = $objWMIService.ExecNotificationQuery("select * from __instancedeletionevent " _  
& "within 1 where TargetInstance isa 'Win32_Process'") 
While 1 
$objLatestProcess = $colMonitoredProcesses.NextEvent 
$pdel = _Now()
MsgBox(0,"", "Имя: " & $objLatestProcess.TargetInstance.Name  & @CRLF & _ 
"Расположение: " & $objLatestProcess.TargetInstance.ExecutablePath & @CRLF & _ 
"Командная строка: " & $objLatestProcess.TargetInstance.CommandLine & @CRLF & _ 
"PID: " & $objLatestProcess.TargetInstance.ProcessId & @CRLF & _ 
"Приоритет: " & $objLatestProcess.TargetInstance.Priority & @CRLF & _
"Время запуска:        " & WMIDateStringToDate($objLatestProcess.TargetInstance.CreationDate) & @CRLF & _ 
"Время завершения: " & $pdel & @CRLF & _ 
"____________________________________")
WEnd

;###########################################
Func WMIDateStringToDate($str)
Local $WMIDateStringToDate
If not $str = "" Then
	$WMIDateStringToDate=StringMid($str,7,2) & '.' & StringMid($str,5,2) & '.' & _
	StringLeft($str,4) & chr(32) & StringMid($str,9,2) & ':' & _
	StringMid($str,11,2) & ':' & StringMid($str,13,2)
EndIf
Return $WMIDateStringToDate
EndFunc
З.Ы.
Не мешало бы скрыть присутствие скрипта в списке процессов.
Слышал, что это можно сделать через WinApi, но я не знаю как...
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:25, 28-04-2007 | #346