我正在寻找一种从运行创建的对象中检索进程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实现它。
答案 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()