指定したウィンドウの情報を取得          <TOP>


マウスで指定したウィンドウの情報を取得します。

GetCursorPos マウスカーソルのスクリーン座標を取得

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

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

GetWindowWord ウィンドウに関連付けている補足データ域からワード値を取得

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

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

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

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

 

TimerIntervalはプロパティで設定しています。

 

'================================================================
'= 指定したウィンドウの情報を取得
'=    (GetWindowWord.bas)
'================================================================
#include "Windows.bi"

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

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

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

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

' 指定されたウィンドウに関しての情報を取得。また、拡張ウィンドウメモリから、指定されたオフセットにある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 12

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Var pt 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(pt)
    ptx = pt.x
    pty = pt.y

    hWndOver = Api_WindowFromPoint(ptx, pty)

    If hWndOver <> hWndLast Then
        hWndLast = hWndOver
        Cls
        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) ' Window Style
        txt = txt & "Window Style            : &&H" & Hex$(lWindowStyle) & vbCrLf

        'パレントウィンドウのハンドルを取得
        hWndParent = Api_GetParent(hWndOver)

        'ウィンドウの情報取得
        If hWndParent <> 0 Then
            'WindowID取得
            wID = Api_GetWindowWord(hWndOver, GWW_ID)
            txt = txt & "Window ID Number        : &&H" & Hex$(wID) & vbCrLf
            txt = txt & "Parent Window Handle    : &&H" & Hex$(hWndParent) & vbCrLf

            'ParentWindowのテキスト取得
            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
            'Parentの無いとき
            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(hInstance, sModuleFileName, 100)
        txt = txt & "Module                  : " &  Left$(sModuleFileName, Ret) & vbCrLf

        '結果表示
        Text1.SetWindowtext txt
    End If
End Sub

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