| 
    
     |  | ▼亜矢 さん: 
 結構ややこしいけど。
 ネットから拾い集めて書いたコードです。
 Sheet1 の A列にウィンドウハンドル、B列にクラスコード、C列のキャプションを列挙。
 
 Option Explicit
 
 Private Declare Function GetWindow Lib "USER32" _
 (ByVal hWnd As Long, ByVal wCmd As Long) As Long
 Private Declare Function GetWindowText Lib "USER32" _
 Alias "GetWindowTextA" (ByVal hWnd As Long, _
 ByVal lpString As String, ByVal cch As Long) As Long
 Private Declare Function IsWindowVisible Lib "USER32" _
 (ByVal hWnd 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 GW_HWNDNEXT = 2  '次のウィンドウハンドル取得
 Private Const GW_HWNDFIRST = 0 'トップ位置ウィンドウハンドル取得
 Private Const GW_OWNER = 4   'オーナーウィンドウハンドル取得
 
 Sub Sample()
 Dim myhWnd As Long
 Dim hWind As Long
 Dim rtn As Long
 Dim myClass As String * 128
 Dim myCaption As String * 128
 Dim i As Long
 
 i = 1
 Sheets("Sheet1").Cells.ClearContents
 
 myhWnd = Application.hWnd  '自分自身のハンドル
 
 hWind = GetWindow(myhWnd, GW_HWNDFIRST)
 Do Until hWind = 0
 If IsWindowVisible(hWind) And GetWindow(hWind, GW_OWNER) = 0 Then 'タスクバーにあるもの
 myClass = ""
 Call GetClassName(hWind, myClass, Len(myClass))
 If Left$(myClass, 7) <> "Progman" Then
 myCaption = ""
 rtn = GetWindowText(hWind, myCaption, Len(myCaption))
 If rtn Then   'キャプションが "" でない場合
 With Sheets("Sheet1")
 .Cells(i, "A").Value = hWind   'ハンドル
 .Cells(i, "B").Value = myClass  'クラス名
 .Cells(i, "C").Value = myCaption  'キャプション
 i = i + 1
 End With
 End If
 End If
 End If
 hWind = GetWindow(hWind, GW_HWNDNEXT)
 Loop
 
 End Sub
 
 
 |  |