关闭由WScript.CreateObject创建的IE实例

时间:2012-04-18 03:49:25

标签: internet-explorer vbscript automation wmi

我正在寻找一种从运行创建的对象中检索进程ID的方法:

Set ie = WScript.CreateObject("InternetExplorer.Application", "ie_")

我的问题是,有时我发现iexplorer进程仍然处于打开状态,并且在运行后仍未关闭:

ie.stop
ie.Quit

我找到了一些解决方法,比如寻找最新的iexplorer进程或查看进程名称,但这对我来说并不好,因为我有几个Internet Explorer实例并行打开了不同的进程和它可能在同一时间。

这不好:

Set colProcessList = objWMIService.ExecQuery _ 
("Select * from Win32_Process Where " _ 
& "Name = '"& sProcessName & "'") 

我看到this solution可能有用,但我不知道如何为Internet Explorer实现它。

2 个答案:

答案 0 :(得分:3)

如果不调用powershell命令或使用com包装器,您可能需要通过其命令行过滤进程。从dcom启动创建的iexplorer.exe进程有一个命令行,如-Embedding。关于我的意思的示例查询。

  

从Win32_Process中选择*其中Name =' iexplore.exe'和CommandLine喜欢'% - 嵌入'

是的我听说过,这将返回所有嵌入的实例,因此如果有多个实例,它可能没用。

IE对象实例具有返回mainwindowhandle的属性:HWND

使用HWND可以做些什么来终止更可靠:

从Powershell运行命令:

Set WshShell = WScript.CreateObject("WScript.Shell")
strCommand = "powershell -Command ""Get-Process | Where-Object {$_.MainWindowHandle -eq "& IE.Hwnd &"} | kill"""
WshShell.Run strCommand, vbHide, True

使用/编写包装Windows API的组件(仅限32位):http://www.codeproject.com/Articles/16558/DestroyWindow-in-VBScript

Set obj = CreateObject("APIWrapperCOM.APIWrapper")
    obj.KillWindow IE.Hwnd

希望它有所帮助。

答案 1 :(得分:0)

我认为你正在寻找这个 我已经在Powershell对象中对它进行了测试,所以它应该是一样的。

$ie.Quit()