Killing a program/process with VBscript - TechRepublic
Question
March 19, 2008 at 07:51 AM
richard_agee304

Killing a program/process with VBscript

by richard_agee304 . Updated 18 years, 3 months ago

I’m trying to run/kill a defrag program/process after it runs but I’m not sure how to go about it with VBscript. Here’s what I’ve got:
‘Program to run Defraggler (Hard drive defragger)

strComputer = “.”

Dim WshShell

Set WshShell = CreateObject(“wscript.Shell”)

‘Open Defraggler
WshShell.Run(“””C:\Program Files\Defraggler\Defraggler.exe”””)

‘Sleep for 2 seconds
WScript.Sleep 2000

‘Wait until Defraggler has loaded
While WshShell.AppActivate(“Piriform Defraggler”) = False
WScript.Sleep 100
Wend

‘Bring Defraggler to the foreground
WshShell.AppActivate(“Piriform Defraggler”)

‘Send Alt-A keystroke
WshShell.SendKeys “%A”
WScript.Sleep 1000

WshShell.SendKeys “{DOWN}”
WScript.Sleep 1000

‘Send ENTER keystroke
WshShell.SendKeys “{ENTER}”
WScript.Sleep 1000

‘Send ENTER keystroke
WshShell.SendKeys “{ENTER}”

WScript.Sleep 1000

‘Ensures Virtual Memory is given time to increase
Wscript.Sleep 100000

‘Select an instance of Win32_process = Defraggler
Set wmi = getobject(“winmgmts:”)
sQuery = “select * from win32_process ” & “where name=’Defraggler.exe'”
set processes = wmi.execquery(sQuery)

‘Allow Defraggler to run while Virtual memory size is greater than 14000
Do while WorkingSetSize > 14000
wscript.sleep 500
set processes = wmi.execquery(sQuery)
Loop

‘Exit the program now that the Defraggler is finished updating
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & _
“\root\cimv2”)
Set colProcessList = objWMIService.ExecQuery _
(“Select * from Win32_Process Where Name = ‘Defraggler.exe'”)
For Each objProcess in colProcessList
objProcess.Terminate()
Next

It starts the defrag program, but it doesn’t kill the program after it runs. All advice is wonderful.

This discussion is locked

All Comments