我正在寻找一种方法来检索从由运行时创建的对象的进程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。
如果没有调用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
希望能帮助到你。
我认为你正在寻找这一次我在一个PowerShell对象来测试它,所以它应该是同样的事情。
$ie.Quit()