views:

440

answers:

2

I'm trying to write a Windows command file to open a webpage in IE, wait for it to load, then close the IE window. The following works but will kill all IE windows so any that were already open before running the .cmd will also get closed.

start iexplore.exe "page to load"
ping localhost -n 10 > nul
taskkill /IM iexplore.exe

I only want to kill the IE that was opened. I know I can just kill a particular process if I know its PID but how can find this from the command line? Is there a way to get it when starting the IE window? What I really want to do is:

start iexplore.exe "page to load"
ping localhost -n 10 > nul
taskkill /PID ?

where ? is the PID of the IE that gets opened but how can I get this? This needs to run as a .cmd file without any input from a user.

A: 

use vbscript

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strProcess = objArgs(0) 'argument, which is the process name
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
' call WMI service Win32_Process 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '"&strProcess&"'")
t=0
For Each objProcess in colProcessList
    ' do some fine tuning on the process creation date to get rid of "." and "+"
    s = Replace( objProcess.CreationDate ,".","")
    s = Replace( objProcess.CreationDate ,"+","")
    ' Find the greatest value of creation date
    If s > t Then
        t=s
        strLatestPid = objProcess.ProcessID
    End If    
Next
WScript.Echo "latest: " & t , strLatestPid
'Call WMI to terminate the process using the found process id above
Set colProcess = objWMIService.ExecQuery("Select * from Win32_Process where ProcessId =" & strLatestPid)
For Each objProcess in colProcess
    objProcess.Terminate()
Next

usage:

c:\test>cscript //nologo kill.vbs "iexplore.exe"
ghostdog74
Can you give a bit of an explanation for how that works please? I've not used vbscript before.
Chris R
+3  A: 

IE already supports automation, there is no point in finding and killing the correct process:

Set IE = CreateObject("InternetExplorer.Application")
IE.visible=true
IE.navigate "http://stackoverflow.com/"
while IE.Busy
 WScript.Sleep 555
 wend
IE.Quit

Save as .vbs (And run with wscript.exe from parent program/batch file)

Anders
Cheers. Does what I want and can control the time exactly (it was bit rough with my ping example).
Chris R