タイトル : Re: withEventsで生成したInternetExplorerが捕捉できない 投稿日 : 2015/04/12(Sun) 04:24 投稿者 : 魔界の仮面弁士
やりたい事が理解できているか自信が無いですが、こういうことで良いのかな。 IE の OnQuit イベントの受信は、クラスモジュール CBrowser で行わせています。 で、それをコレクションで束ねた物を、ShellWindows 代わりに使うという寸法です。 OnQuit されたことを自作コレクションに伝えるイベント管理クラスは、面倒なので省略。 イベント通知するかわりに、Form1 自身のメソッドをコールバックすることで代用しています。 複数フォームを持つアプリの場合は、管理クラスも作った方が良いでしょうね。 ※当方には Win7 + VB6 な環境が無いので未チェックです。 '==== クラスモジュール「CBrowser」 Option Explicit Public Owner As Form1 Private WithEvents IE As InternetExplorer Private Sub Class_Initialize() Set IE = New InternetExplorer IE.Visible = True End Sub Public Property Get Browser() As InternetExplorer Set Browser = IE End Property Private Sub Class_Terminate() Set Owner = Nothing IE.Quit 'アプリ終了時にIEを閉じたくないなら「Set IE = Nothing」 End Sub Private Sub IE_OnQuit() 'IEが終了したら、管理クラス(この場合はForm1)に通知する If Not Owner Is Nothing Then Call Owner.OnIEQuit(IE) End If Set IE = Nothing End Sub '==== フォーム「Form1」 'Command1 と List1 を貼り、List1 には URL を並べておく Option Explicit Private mCols As Collection '起動されたIE群を管理するコレクション Private Declare Function ShowWindow Lib "User32" (ByVal HWND As OLE_HANDLE, ByVal nCmdShow As Long) As Long Private Declare Function CloseWindow Lib "User32" (ByVal HWND As OLE_HANDLE) As Long Private Sub Form_Initialize() Set mCols = New Collection End Sub Private Sub Command1_Click() Const SW_SHOWMAXIMIZED = 3& Dim strURL As String strURL = List1.Text Dim oBrowser As CBrowser For Each oBrowser In mCols If InStr(oBrowser.Browser.LocationURL, strURL) <> 0 Then 'すでに開いているURLなら最大化する '(アクティブ化のコードは用意しなくて良いのかな?) Call ShowWindow(oBrowser.Browser.HWND, SW_SHOWMAXIMIZED) Exit Sub End If Next 'まだ開いてないページなら新規に開く(ただし最小化で) Call OpenIE(strURL) End Sub '自作クラス CBrowser からの終了通知を受け取るためのコールバック Friend Sub OnIEQuit(ByVal sender As InternetExplorer) Dim n As Long For n = 1 To mCols.Count If mCols(n).Browser Is sender Then '終了したIEをコレクションから取り除く Call mCols.Remove(n) Exit For End If Next End Sub 'IEを起動し、コレクションで管理する Public Sub OpenIE(ByVal strURL As String) Dim oBrowser As CBrowser Set oBrowser = New CBrowser Set oBrowser.Owner = Me 'コールバック先のクラス Call mCols.Add(oBrowser) '自作コレクションに追加 Call CloseWindow(IE.HWND) '最小化 Call oBrowser.Browser.Navigate2(strURL) End Sub |