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 に答える