IEが最小化されたことを知るには?

解決


田郎  2008-11-22 00:07:13  No: 101344  IP: 192.*.*.*

よろしくお願いいたします。

下記のような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

編集 削除
やじゅ  2008-11-22 09:36:08  No: 101345  IP: 192.*.*.*

最小化されているかどうかを判断する IsIconic API
最大化されているかどうかを判断する IsZoomed API
最小化を解除してアクティブ化する   OpenIcon API
ウィンドウの表示状態を設定する     ShowWindow API

指定すべきウィンドウハンドルは、InternetExplorer
オブジェクトの HWND プロパティより取得出来ます。
http://madia.world.coocan.jp/vb/API/IsIconic.htm

編集 削除
田郎  2008-11-22 15:28:46  No: 101346  IP: 192.*.*.*

ありがとうございます。

説明が足りなかったようです。
今現在の状態ではなく、最小化された瞬間や最小化から復帰した瞬間を捉えたいと考えております。
タイマーでずっと監視するという方法以外に何か別の方法(VB の Resizeイベントのようなもの)があるのかもしれないと思い、質問させていただきました。
説明不足で手間をおかけしますがよろしくお願いいたします。

編集 削除
花ちゃん  2008-11-22 17:47:21  No: 101347  IP: 192.*.*.*

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

編集 削除
田郎  2008-11-22 19:39:48  No: 101348  IP: 192.*.*.*

ありがとうございます。

早速、試させて頂きました。しかし、最初何も反応がなかったのでいろいろ調べていたのですが、
If Command = 1 Then
という行を
If Command = -1 Then
と変更してみたところ完全に目的の動作を達成できました!!

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

編集 削除
花ちゃん  2008-11-24 10:28:13  No: 101349  IP: 192.*.*.*

>If Command = -1 Then
>と変更してみたところ完全に目的の動作を達成できました!!

IE のバージョンが 6.0 だったんですね。

IE のバージョンが7.0 なら、If Command = 1 Then の方が無難かと。

編集 削除
田郎  2008-11-24 14:09:27  No: 101350  IP: 192.*.*.*

ありがとうございます。

> IE のバージョンが 6.0 だったんですね。
はい、まさにそのとおりです。
バージョンによって逆になるなんて、IEを使うときは気を付けないといけないんですね。
ご親切にどうもありがとうございました。

編集 削除