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

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

Ветеран


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

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


Примерно так:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim arrProcesses
Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim objSWbemEventSource

Dim lngThisScriptProcessID


arrProcesses = Array("svchost.exe", "services.exe", "ctfmon.exe", "explorer.exe")

strComputer = "."

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
objSWbemLocator.Security_.Privileges.AddAsString "SeDebugPrivilege", True

Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")

lngThisScriptProcessID = GetScriptProcessID(objSWbemServicesEx)

For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process")
	With objSWbemObjectEx
		If Not (IsProcessEnabled(arrProcesses, .Name) Or .ProcessID = lngThisScriptProcessID) Then
			If .Terminate() = 0 Then
				'WScript.Echo .Name, "Terminate"
			End If
		End If
	End With
Next

Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
	"SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")

Do
	With objSWbemEventSource.NextEvent().TargetInstance
		If Not IsProcessEnabled(arrProcesses, .Name) Then
			If .Terminate() = 0 Then
				'WScript.Echo .Name, "Terminate"
			End If
		End If
	End With
Loop

Set objSWbemEventSource = Nothing
Set objSWbemObjectEx    = Nothing
Set objSWbemServicesEx  = Nothing
Set objSWbemLocator     = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Function IsProcessEnabled(arrProcesses(), strProcess)
	Dim elem
	
	IsProcessEnabled = False
	
	For Each elem In arrProcesses
		If UCase(strProcess) = UCase(elem) Then
			IsProcessEnabled = True
			
			Exit For
		End If
	Next
End Function
'=============================================================================

'=============================================================================
Function GetScriptProcessID(objSWbemServicesEx)
	Dim strPath
	
	strPath = """mshta.exe"" " & _
	"""<HTML><HEAD><HTA:APPLICATION APPLICATIONNAME='GetParentPID' " & _
	"WINDOWSTATE='minimize' SHOWINTASKBAR='no'</HEAD></HTML>"""
	
	With WScript.CreateObject("WScript.Shell").Exec(strPath)
		GetScriptProcessID = objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(.ProcessID) &"'").ParentProcessID
		.Terminate
	End With
End Function
'=============================================================================

Перед запуском убедитесь, что Вы сохранили все данные: поскольку Вы перечислили не все необходимые для нормальной работы процессы, а я не стал расшифровывать Ваше «и тд», результатом снятия одной из системных служб станет немедленная перезагрузка ОС.

Последний раз редактировалось Iska, 30-03-2012 в 13:05. Причина: Убрано забытое имя объекта «objSWbemObjectEx» внутри блока «With…End With»

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:40, 30-03-2012 | #7