ウィンドウのクラス名や属性を取得 <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