Ветеран
Сообщения: 27449
Благодарности: 8087
|
Профиль
|
Отправить PM
| Цитировать
Примерно так:
читать дальше »
Код: ![Выделить весь код](images/misc/selectcode.png)
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
|