初めて投稿させていただきます。
メニュー画面に2つのコマンドボタンが有り
1、それぞれのボタンで起動したIE画面の監視を行う。
2、IE画面のツールバーは非表示で起動させる。
3、AAAボタンが押下されたらAAA画面をACTIVEにして最前面に表示、
4、BBBボタンが押下されたらBBB画面をACTIVEにして最前面表示する。
5、メニューのEndボタン押下時に、IE画面AAAとBBBを強制的に終了させる。
上記の様な動きにしたいのですが、IEが2画面でも1プロセスしか
起動しない為、3、4の動作が実現出来ません。
Set objIE = CreateObject("InternetExplorer.application")で、
個々にIEXPLORE.EXEのプロセスを持つ事が可能であれば解決できるんですが、、
1〜5の機能を生かす方法があれば、ご教授願えますでしょうか?
'***************
'
' IE起動 AAA画面
'
'***************
Private Sub cmdAAA_Click()
On Error Resume Next
Dim lRet As Long
Dim hlProcess As Long
Dim lwProcessID As Long
Dim lpdwExitCode As Long
Dim objIE As Object
'AAAブラウザが起動しているか確認
If glAAA <> 0 Then
AppActivate glAAA
Exit Sub
End If
'IE起動
Set objIE = CreateObject("InternetExplorer.application")
'URL設定
objIE.navigate (URL)
objIE.Visible = True
'ツールバーが非表示で起動
objIE.toolbar = False
glAAAHwnd = objIE.hwnd
'プロセスID取得
Call GetWindowThreadProcessId(objIE.hwnd, lwProcessID)
'プロセスのオープン
hlProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, lwProcessID)
'起動を行なったAAAブラウザのプロセスIDを保持する。
glAAA = lwProcessID
Do
'WINDOWS上にAAA画面が起動しているか常に監視する。
lRet = GetExitCodeProcess(hlProcess, lpdwExitCode)
Call Sleep(1000)
DoEvents
Loop While lpdwExitCode
'保持したウインドウハンドルクリア
glAAAHwnd = 0
'保持したプロセスIDクリア
glAAA = 0
End Sub
'***************
'
' IE起動 BBB画面
'
'***************
Private Sub cmdBBB_Click()
On Error Resume Next
Dim lRet As Long
Dim hlProcess As Long
Dim lwProcessID As Long
Dim lpdwExitCode As Long
Dim objIE As Object
'BBBブラウザが起動しているか確認
If glBBB <> 0 Then
AppActivate glBBB
Exit Sub
End If
'IE起動
Set objIE = CreateObject("InternetExplorer.application")
'URL設定
objIE.navigate (URL)
objIE.Visible = True
'ツールバーが非表示で起動
objIE.toolbar = False
glBBBHwnd = objIE.hwnd
'プロセスID取得
Call GetWindowThreadProcessId(objIE.hwnd, lwProcessID)
'プロセスのオープン
hlProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, lwProcessID)
'起動を行なったBBBブラウザのプロセスIDを保持する。
glBBB = lwProcessID
Do
'WINDOWS上にBBB画面が起動しているか常に監視する。
lRet = GetExitCodeProcess(hlProcess, lpdwExitCode)
Call Sleep(1000)
DoEvents
Loop While lpdwExitCode
'保持したウインドウハンドルクリア
glBBBHwnd = 0
'保持したプロセスIDクリア
glBBB = 0
End Sub
Private Sub cmdEND_Click()
On Error Resume Next
Dim i As Integer
Dim lngMutexHandle As Long
Dim cbNeeded As Long
Dim lngProcessHandle As Long
Dim lnghModule As Long
Dim lngcbNeeded As Long
Dim lngProcessID(255) As Long
Dim lngWin32apiResultCode As Long
Dim strExeFileNameBuffer As String * 516
Dim strModuleName As String
Dim lngApiRet As Long
lngApiRet = EnumProcesses(lngProcessID(0), UBound(lngProcessID), cbNeeded)
For i = 0 To (cbNeeded / 4) - 1
'プロセスのハンドルを取得
lngProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, 0&, lngProcessID(i))
If lngProcessHandle Then
' 実行可能モジュール名を取得
If GetModuleBaseName(lngProcessHandle, 0, strExeFileNameBuffer, Len(strExeFileNameBuffer)) <> 0 Then
'実行可能モジュール名を切り出し
strModuleName = Left(strExeFileNameBuffer, InStr(strExeFileNameBuffer, vbNullChar) - 1)
If Trim$(UCase(strModuleName)) = "XXXXXX.EXE" Or lngProcessID(i) = glAAA Or lngProcessID(i) = glBBB Then
'VBの別FORMの強制終了処理
If TerminateProcess(lngProcessHandle, 0) <> 0 Then
Call CloseHandle(lngProcessHandle)
End If
'AAA画面を強制終了する
If glAAAHwnd <> 0 Then
Call SendMessageByNum(glAAAHwnd, WM_SYSCOMMAND, SC_CLOSE, 0)
End If
'BBB画面を強制終了する
If glBBBHwnd <> 0 Then
Call SendMessageByNum(glBBBHwnd, WM_SYSCOMMAND, SC_CLOSE, 0)
End If
End If
End If
End If
Call CloseHandle(lngProcessHandle)
Loop
End Sub
> 1、それぞれのボタンで起動したIE画面の監視を行う。
『監視』とは、具体的にはどのような事でしょうか?
とりあえず、ユーザー操作などによる終了を捕らえたい、という意味で
あれば、OnQuitイベントを使う事ができますけれども。
> 2、IE画面のツールバーは非表示で起動させる。
ToolBar プロパティ。
お気に入りや履歴などのバーも消すなら、ShowBrowserBarメソッド。
> 3、AAAボタンが押下されたらAAA画面をACTIVEにして最前面に表示、
> 4、BBBボタンが押下されたらBBB画面をACTIVEにして最前面表示する。
AAA画面、BBB画面というのが良く分かりませんが、アクティブにするのは
AppActivate とか SetForegroundWindow APIとか。
最前面表示に関しては HWND_TOPMOST とか。
> 5、メニューのEndボタン押下時に、IE画面AAAとBBBを強制的に終了させる。
Quitメソッド。
AAA及びBBBをInternetExplorer型のイベント付きオブジェクトとして
変数に保管しておけば、対応はできますよね。
プロセスのハンドルが同じでも、ウィンドウのハンドルは異なる
でしょうし、オブジェクトも異なるでしょうし。
魔界の仮面弁士様
K.J.K.様
回答ありがとうございます。
参考にして試してみますので、
のちほど結果を報告させていただきます。
魔界の仮面弁士様
K.J.K.様
回答ありがとうございます。
参考にして試してみますので、
のちほど結果を報告させていただきます。
ツイート | ![]() |