Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


32432 / 76734 ←次へ | 前へ→

【49538】Re:IEで新しく開いたWindowを制御する
回答  neptune  - 07/6/9(土) 14:55 -

引用なし
パスワード
   ▼ハチ さん:
>APIぜんぜんわかりません ><
>
>あの最初に書く(Declareステートメントでしたっけ?)が難解ですね・・・
>バグらせずに制御できる自信もないです・・・
これ読んだんで、サンプル書きました。
一応問題なく動きました。XP SP2 + Office2K
※Excel97では使用できません。

サンプルは1個目と2個目のIEのHWNDを取得するだけのものですが、
「'1個目のIEのHWND保存用」の変数を配列にでもして、EnumFuncでの
比較時、複数のHWNDと比較してやれば、まだ取得してないIEのHWNDが
取得でき、何個でも対応可能です。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
          (ByVal lpClassName As String, _
          ByVal lpWindowName As String) As Long

Private Declare Function EnumWindows Lib "user32" _
          (ByVal lpEnumFunc As Long, ByVal lparam As Long) As Long
          
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
          (ByVal hwnd As Long, _
          ByVal lpClassName As String, _
          ByVal nMaxCount As Long) As Long
                    

Private Const IEClassName As String = "IEFrame"   'IEのClass名
Private Const XLClassName As String = "XLMAIN"   'XL2000
Private Const MAX_PATH As Long = 255

Private FirstIE As Long   '1個目のIEのHWND保存用
Private OtherIE As Long   '戻り値用変数

'1個目のHWND取得のみ
Sub test_FindWindow()
  FirstIE = FindWindow(IEClassName, vbNullString)
  Debug.Print "1個目: " & FirstIE
End Sub

'2個目のHWND取得のみ
Sub test_FindWindow2()
  Debug.Print "2個目: " & FindIE(FirstIE)
End Sub

Function FindIE(phWnd As Long) As Long
Dim handle As Long
Dim ret As Boolean
Dim sTitle As String

  handle = FindWindow(XLClassName, Application.Caption)
  OtherIE = -1  '戻り値用変数の初期化
  
  ret = EnumWindows(AddressOf EnumFunc, phWnd)
  '取得できたら
  If ret = False And OtherIE > 0 Then
    FindIE = OtherIE
  End If

End Function

Private Function EnumFunc(ByVal hwnd As Long, _
          ByVal lparam As Long) As Boolean
Dim sClassName As String * MAX_PATH
Dim sbuf As String

  EnumFunc = True
  
  GetClassName hwnd, sClassName, MAX_PATH
  sbuf = Left(sClassName, InStr(1, sClassName, Chr(0)) - 1)
  If sbuf = IEClassName Then
    If hwnd <> lparam Then
      OtherIE = hwnd
      EnumFunc = False
    End If
  End If
End Function

ごゆっくりどうぞ^ ^

6 hits

【49515】IEで新しく開いたWindowを制御する ハチ 07/6/8(金) 14:04 質問
【49518】Re:IEで新しく開いたWindowを制御する neptune 07/6/8(金) 15:38 発言
【49532】Re:IEで新しく開いたWindowを制御する ハチ 07/6/8(金) 18:09 お礼
【49538】Re:IEで新しく開いたWindowを制御する neptune 07/6/9(土) 14:55 回答
【49544】Re:IEで新しく開いたWindowを制御する neptune 07/6/10(日) 10:19 発言
【49562】Re:IEで新しく開いたWindowを制御する ハチ 07/6/11(月) 13:14 お礼
【49563】Re:IEで新しく開いたWindowを制御する neptune 07/6/11(月) 15:06 発言
【49569】Re:IEで新しく開いたWindowを制御する ハチ 07/6/11(月) 16:46 お礼
【49578】Re:IEで新しく開いたWindowを制御する neptune 07/6/11(月) 21:55 発言
【49586】Re:IEで新しく開いたWindowを制御する ハチ 07/6/12(火) 9:29 発言
【49592】WebBrowserコントロールもやってみました ハチ 07/6/12(火) 11:23 発言
【49600】Re:WebBrowserコントロールもやってみました neptune 07/6/12(火) 14:08 発言

32432 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free