ウィンドウのクラス名や属性を取得          <TOP>


WindowFromPoint 指定座標位置にあるウィンドウハンドルを取得

GetWindowWord ウィンドウに関連付けた補足データ領域からワード値を取得 (GetWindowLongを推奨)

GetCursorPos マウスポインタの現在の位置に相当するスクリーン座標を取得

GetModuleFileName ロードされている実行モジュールのフルパスを取得

GetWindowLong 指定されたウィンドウに関しての情報を取得

GetParent 指定された子ウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを取得

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

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

 

参照(F-Basic用に書換)

http://support.microsoft.com/?kbid=112649

 

'================================================================
'= ウィンドウのクラス名や属性を取得
'=    (GetClassName.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    x As Long
    y As Long
End Type

' 指定の座標位置にあるウィンドウハンドルを取得
Declare Function Api_WindowFromPoint& Lib "user32" Alias "WindowFromPoint" (ByVal xPoint&, ByVal yPoint&)

' ウィンドウに関連付けてる補足データ域からワード値を取得
Declare Function Api_GetWindowWord& Lib "user32" Alias "GetWindowWord" (ByVal hWnd&, ByVal nIndex&)

' マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得
Declare Function Api_GetCursorPos& Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI)

' ロードされている実行モジュールのフルパス名を取得
Declare Function Api_GetModuleFileName& Lib "Kernel32" Alias "GetModuleFileNameA" (ByVal hModule&, ByVal lpFileName$, ByVal nSize&)

' 指定されたウィンドウに関しての情報を取得。また、拡張ウィンドウメモリから、指定されたオフセットにある32ビット値を取得することもできる
Declare Function Api_GetWindowLong& Lib "user32" Alias "GetWindowLongA" (ByVal hWnd&, ByVal nIndex&)

' 指定された子ウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを返す
Declare Function Api_GetParent& Lib "user32" Alias "GetParent" (ByVal hWnd&)

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

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

#define GWW_HINSTANCE -6                '
#define GWW_ID -12                      '
#define GWL_STYLE -16                   'アプリケーションのインスタンスハンドル
#define vbCrLf (Chr$(13) & Chr$(10))    'キャリッジリターンとラインフィード(\r\n)

Var Shared Timer1 As Object
Var Shared Text1 As Object

Timer1.Attach GetDlgItem("Timer1")
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Timer1.SetInterval 50
    Timer1.Enable -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Var pa As POINTAPI
    Var ptx As Long
    Var pty As Long
    Var sWindowText As String * 100
    Var sClassName As String * 100
    Var hWndOver As Long
    Var hWndParent As Long
    Var sParentClassName As String * 100
    Var wID As Long
    Var lWindowStyle As Long
    Var hInstance As Long
    Var sParentWindowText As String * 100
    Var sModuleFileName As String * 100
    Static hWndLast As Long
    Var txt As String
    Var Ret As Long

    Ret = Api_GetCursorPos(pa)                                'カーソル位置を取得
    ptx = pa.x
    pty = pa.y

    'カーソルの位置しているウィンドウを取得
    hWndOver = Api_WindowFromPoint(ptx, pty)

    txt = ""
    If hWndOver <> hWndLast Then                              '変更があったら表示する
        hWndLast = hWndOver                                   '変更の保存
        txt = txt & "Window Handle           : &&H" & Hex$(hWndOver) & vbCrLf 'ウィンドウハンドルの表示

        Ret = Api_GetWindowText(hWndOver, sWindowText, 100)   'ウィンドウテキスト 
        txt = txt & "Window Text             : " & Left$(sWindowText, Ret) & vbCrLf

        Ret = Api_GetClassName(hWndOver, sClassName, 100)     'ウィンドウクラス
        txt = txt & "Window Class Name       : " & Left$(sClassName, Ret) & vbCrLf

        lWindowStyle = Api_GetWindowLong(hWndOver, GWL_STYLE) 'ウィンドウスタイル
        txt = txt & "Window Style            : &&H" & Hex$(lWindowStyle) & vbCrLf

        '親ウィンドウハンドルの取得
        hWndParent = Api_GetParent(hWndOver)

        '親ウィンドウがあれば、さらに情報を取得
        If hWndParent <> 0 Then
            'ウィンドウ ID の取得
            wID = Api_GetWindowWord(hWndOver, GWW_ID)
            txt = txt & "Window ID Number        : &&H" & Hex$(wID) & vbCrLf
            txt = txt & "Parent Window Handle    : &&H" & Hex$(hWndParent) & vbCrLf

            '親ウィンドウテキストの取得
            Ret = Api_GetWindowText(hWndParent, sParentWindowText, 100)
            txt = txt & "Parent Window Text      : " & Left$(sParentWindowText, Ret) & vbCrLf

            '親ウィンドウクラス名の取得
            Ret = Api_GetClassName(hWndParent, sParentClassName, 100)
            txt = txt & "Parent Window Class Name: " & Left$(sParentClassName, Ret) & vbCrLf
        Else
            '親ウィンドウがないとき
            txt = txt & "Window ID Number        : N/A" & vbCrLf
            txt = txt & "Parent Window Handle    : N/A" & vbCrLf
            txt = txt & "Parent Window Text      : N/A" & vbCrLf
            txt = txt & "Parent Window Class Name: N/A" & vbCrLf
        End If

        'ウィンドウインスタンスの取得
        hInstance = Api_GetWindowWord(hWndOver, GWW_HINSTANCE)

        'モジュール名の取得
        Ret = Api_GetModuleFileName(GethInst, sModuleFileName, 100)
        txt = txt & "Module                  : " & Left$(sModuleFileName, Ret) & vbCrLf
        Text1.SetWindowText txt
    End If
End Sub

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