2012-04-18 15 views
2
创建一个IE实例

我正在寻找一种方法来检索从由运行时创建的对象的进程ID:闭幕通过WScript.CreateObject

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

我的问题是,有时我看到iexplorer进程是开放并运行后未关闭:

ie.stop 
ie.Quit 

我找到了一些解决方法,就像寻找最新iexplorer过程或看进程名,但是这是不好的我,因为我有几个互联网资源管理器实例打开通过不同的过程并行,它可能在同一时间。

这是不好:

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

我看到this solution可能的工作,但我不知道如何实现它的Internet Explorer。

回答

2

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

选择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 

希望它有帮助。

+0

非常好。有时我看到导航功能会在“常规”Internet Explorer中打开我的网站,而不是由Application.internetexplorer创建的窗口。它发生在我用“_self”标志呼叫时... 你能想到一个原因吗?在这种情况下,杀死将不会帮助 – fredy 2012-04-19 16:44:47

+0

顺便说一下,我使用了Powershell的命令 – fredy 2012-04-19 16:46:27

0

我认为你正在寻找这个 我已经在Powershell对象中测试过它,所以它应该是同样的东西。

$ie.Quit()