ウィンドウ名とクラス階層一覧を取得          <TOP>


GetWindow 指定されたウィンドウと指定された関係にあるウィンドウのハンドルを取得

GetWindowText ウィンドウのタイトル文字列を取得

GetTopWindow トップレベルの子ウィンドウを取得

GetClassName ウィンドウのクラス名を取得

 

 

'================================================================
'= ウィンドウ名とクラスの階層一覧を取得
'=    (GetClassName2.bas)
'================================================================
#include "Windows.bi"

#define GW_CHILD 5                      '基準となるウィンドウの子ウィンドウのうちトップレベルのウィンドウを検索
#define GW_HWNDNEXT 2                   '基準となるウィンドウの次のウィンドウを検索
#define vbCrLf (Chr$(13) & Chr$(10))    'キャリッジリターンとラインフィード(\r\n)

' 指定されたウィンドウと指定された関係にあるウィンドウのハンドルを取得
Declare Function Api_GetWindow& Lib "user32" Alias "GetWindow" (ByVal hWnd&, ByVal wCmd&)

' ウィンドウのタイトル文字列を取得
Declare Function Api_GetWindowText& Lib "user32" Alias "GetWindowTextA" (ByVal hWnd&, ByVal lpString$, ByVal cch&)

' トップレベルの子ウィンドウを取得
Declare Function Api_GetTopWindow& Lib "user32" Alias "GetTopWindow" (ByVal hWnd&)

' ウィンドウのクラス名を取得
Declare Function Api_GetClassName& Lib "user32" Alias "GetClassNameA" (ByVal hWnd&, ByVal lpClassName$, ByVal nMaxCount&)

Var Shared Edit1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 12
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub AddChildWindows(ByVal hwndParent As Long, ByVal Level As Long)
Sub AddChildWindows(ByVal hwndParent As Long, ByVal Level As Long)
    Var txt As String
    Var WT As String
    Var CN As String
    Var Length As Long
    Var hWnd As Long

    If Level = 0 Then
        hWnd = hwndParent
    Else
        hWnd = Api_GetWindow(hwndParent, GW_CHILD)
    End If

    Do While hWnd <> 0
        WT = Space$(256)
        Length = Api_GetWindowText(hWnd, WT, 255)
        WT = Left$(WT, Length)

        CN = Space$(256)
        Length = Api_GetClassName(hWnd, CN, 255)
        CN = Left$(CN, Length)

        Edit1.SetWindowText Edit1.GetWindowText & vbCrLf & String$(2 * Level, ".") & WT & " (" & CN & ")"

        AddChildWindows hWnd, Level + 1
        hWnd = Api_GetWindow(hWnd, GW_HWNDNEXT)
    Loop
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hWnd As Long
    Var Ret As Long

    hWnd = Api_GetTopWindow(0)
    If hWnd <> 0 Then
        AddChildWindows hWnd, 0
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End