2012-04-18 16 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()