VB6.0 IE8のプロセスID取得について

解決


初心者V  2009-09-01 21:51:18  No: 101958

<動作環境>
WindowsXP Pro
IE8

つい最近VB6.0で開発をはじめた初心者です。
先人の方々、ご教授願います。

VB6.0にて、IEを起動し、終了を検知するまでのアプリを実行しようとしていますが、以下の実行条件の場合に正しくプロセスIDを取得できず、困っています。

①IEをいくつか起動しておく
②VBアプリよりIE起動

処理を実行すると、VBアプリより起動したIEのプロセスIDではなく、一番最初に起動されているIEのプロセス番号を取得してしまう状況です。

−ソースはこちら−−−−−−−−−−−−−−−−−−−−−−−−−−
'IE起動
lwProcessID = CLng(Shell("C:\Program Files\Internet Explorer\iexplore.exe " & "http://XXX.XXX.XXX.XXX:XXXX/test/index.cgi?id=" & BasicModule.strUserID, 3))

'起動したIEのプロセス番号を取得
Set objShell = CreateObject("Shell.Application")
Set objIE = objShell.windows.Item(objShell.windows.Count - 1)
    
'プロセスID取得
Call GetWindowThreadProcessId(objIE.hWnd, lwProcessID)
    
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

ネットで情報を収集していましたが、該当する情報に巡り合えず手詰まり状態です。

よろしくお願いします。


初心者V  2009-09-01 23:58:57  No: 101959

ちなみに、IE6で上記ロジックを検証したところ、VBアプリから起動されたプロセスIDを問題なく取得することができました。
(この場合、
    Set objShell = CreateObject("Shell.Application")
    Set objIE = objShell.windows.Item(objShell.windows.Count - 1)
  の2行は不要になりますが・・・)

いろいろ調査すると、IE8にてプロセスが2つできる現象が元で、正しいプロセスIDが取得できないような気がしています。
(UACが関係しているような記事が過去にありましたが・・・)


スクリプトプログラマ  2009-09-02 03:30:47  No: 101960

lwProcessID = CLng(Shell("""C:\Program Files\Internet Explorer\iexplore.exe"" -nohome " & "http://XXX.XXX.XXX.XXX:XXXX/test/index.cgi?id=" & BasicModule.strUserID, 3))

アプリパスは原則として""で囲みましょう。
-nohomeでプロセスを新規に起こします。
-nohomeがないと、既存プロセスに処理を投げて、自プロセスは消えます。


初心者V  2009-09-03 03:01:24  No: 101961

>スクリプトプログラマさん

早速のご回答、ありがとうございます。

根本的に、"-nohome"を誤解しておりました。

ご回答の方法で、目的のプロセスIDを取得することができました。

IE8が云々と申しましたが、何も関係なく、お恥ずかしい限りです。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加