2

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

4

2 回答 2

3

在不调用 powershell 命令或使用 com 包装器的情况下,您可能希望通过其命令行过滤进程。从 dcom 启动创建的 iexplorer.exe 进程具有类似-Embedding. 关于我的意思的示例查询。

Select * from Win32_Process Where Name = 'iexplore.exe' And 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

希望能帮助到你。

于 2012-04-18T07:52:46.690 回答
0

我认为您正在寻找我在 Powershell 对象中测试过的这个,所以它应该是同一件事。

$ie.Quit()
于 2017-11-20T00:45:26.547 回答