<動作環境>
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)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ネットで情報を収集していましたが、該当する情報に巡り合えず手詰まり状態です。
よろしくお願いします。
ちなみに、IE6で上記ロジックを検証したところ、VBアプリから起動されたプロセスIDを問題なく取得することができました。
(この場合、
Set objShell = CreateObject("Shell.Application")
Set objIE = objShell.windows.Item(objShell.windows.Count - 1)
の2行は不要になりますが・・・)
いろいろ調査すると、IE8にてプロセスが2つできる現象が元で、正しいプロセスIDが取得できないような気がしています。
(UACが関係しているような記事が過去にありましたが・・・)
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がないと、既存プロセスに処理を投げて、自プロセスは消えます。
>スクリプトプログラマさん
早速のご回答、ありがとうございます。
根本的に、"-nohome"を誤解しておりました。
ご回答の方法で、目的のプロセスIDを取得することができました。
IE8が云々と申しましたが、何も関係なく、お恥ずかしい限りです。
ありがとうございました。
ツイート | ![]() |