よろしくお願いいたします。
下記のようなIEを操作するプログラムを作ったのですが、
「IEが閉じられた」ということを知ることはできたのですが(IE_OnQuitイベントで)、
しかし「IEが最小化された」や「IEが最小化状態から復帰した」ということを知る方法がわかりませんでした。
VB のフォームのように Resizeイベントがあればいいのですが見当たりませんでした。
「Microsoft HTML Object Library」 の HTMLWindow2クラスの onresizeイベントでは、
ウインドウ幅や高さの変更のときにしか発生しませんでした。
オブジェクトブラウザを見ると 「Microsoft HTML Object Library」 には他にもたくさんクラスがありましたが、
最小化したかどうかなどを知るためのクラスをご存知の方がいらっしゃいましたら、
どうかご教授のほどよろしくお願いいたします。
Private WithEvents IE As InternetExplorer
Private WithEvents HWin As HTMLWindow2
Private Sub Form_Load()
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://www.google.com/webhp?hl=ja"
IE.Visible = True
End Sub
Private Sub IE_DocumentComplete(ByVal pDisp As Object, url As Variant)
Set HWin = IE.Document.parentWindow
End Sub
Private Sub HWin_onresize()
MsgBox "onresizeイベントが発生しました。", vbMsgBoxSetForeground
End Sub
最小化されているかどうかを判断する IsIconic API
最大化されているかどうかを判断する IsZoomed API
最小化を解除してアクティブ化する OpenIcon API
ウィンドウの表示状態を設定する ShowWindow API
指定すべきウィンドウハンドルは、InternetExplorer
オブジェクトの HWND プロパティより取得出来ます。
http://madia.world.coocan.jp/vb/API/IsIconic.htm
ありがとうございます。
説明が足りなかったようです。
今現在の状態ではなく、最小化された瞬間や最小化から復帰した瞬間を捉えたいと考えております。
タイマーでずっと監視するという方法以外に何か別の方法(VB の Resizeイベントのようなもの)があるのかもしれないと思い、質問させていただきました。
説明不足で手間をおかけしますがよろしくお願いいたします。
IE にもWindowStateChanged イベントがあるのですが、VB からは使用できないようなので
CommandStateChange イベント内でフラグを設定してWin32 APIのIsIconic で状態を取得
するのではどうでしょうか?
目的によっては使えないかも知れませんが下記のような感じで。
Option Explicit
Private WithEvents IE As InternetExplorer
Private Declare Function IsIconic Lib "user32" _
(ByVal hWnd As Long) As Boolean
Private FrgvbMinimized As Boolean
Private Sub Form_Load()
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://www.google.com/webhp?hl=ja"
IE.Visible = True
End Sub
Private Sub IE_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)
If Command = 1 Then
Dim frg As Boolean
frg = IsIconic(IE.hWnd)
If FrgvbMinimized = False And frg Then
MsgBox "最小化されました"
FrgvbMinimized = True
ElseIf FrgvbMinimized = True And Not frg Then
MsgBox "最小化が解除されました"
FrgvbMinimized = False
End If
End If
End Sub
ありがとうございます。
早速、試させて頂きました。しかし、最初何も反応がなかったのでいろいろ調べていたのですが、
If Command = 1 Then
という行を
If Command = -1 Then
と変更してみたところ完全に目的の動作を達成できました!!
本当にありがとうございました。
>If Command = -1 Then
>と変更してみたところ完全に目的の動作を達成できました!!
IE のバージョンが 6.0 だったんですね。
IE のバージョンが7.0 なら、If Command = 1 Then の方が無難かと。
ありがとうございます。
> IE のバージョンが 6.0 だったんですね。
はい、まさにそのとおりです。
バージョンによって逆になるなんて、IEを使うときは気を付けないといけないんですね。
ご親切にどうもありがとうございました。
ツイート | ![]() |