关闭由WScript.CreateObject创建的IE实例(Closing an IE insta

2019-09-16 14:21发布

我正在寻找一种方法来检索从由运行时创建的对象的进程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 & "'") 

我看到这个解决方案可能的工作,但我不知道如何实现它的Internet Explorer。

Answer 1:

如果没有调用PowerShell命令或使用COM包装,你可能希望通过它的命令行过滤过程。 从DCOM启动创建IEXPLORER.EXE过程中有类似的命令行-Embedding 。 什么我指的是简单的查询。

SELECT * FROM Win32_Process的其中名称= 'IEXPLORE.EXE' 而的CommandLine LIKE '%-Embedding'

是的,我听说过你,这将返回所有嵌入的情况下,所以如果有多个实例,它可能不会是有用的。

一个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

希望能帮助到你。



Answer 2:

我认为你正在寻找这一次我在一个PowerShell对象来测试它,所以它应该是同样的事情。

$ie.Quit()


文章来源: Closing an IE instance created by WScript.CreateObject