カーソル位置のウインドウハンドル・クラス名を取得          <TOP>


カーソル位置のウインドウハンドル・クラス名を取得します。

GetCursorPos カーソルの現在のスクリーン座標の取得

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

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

 

図は、F-Basic の「翻訳」アイコン上にマウスがある状態を示しています。

 

'================================================================
'= カーソル位置のウインドウハンドル・クラス名を取得
'=    (WindowFromPoint.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_GetClassName& Lib "user32" Alias "GetClassNameA" (ByVal hWnd&, ByVal lpClassName$, ByVal nMaxCount&)

Var Shared Timer1 As Object
Var Shared Text(5) As Object

Timer1.Attach GetDlgItem("Timer1")
For i = 0 To 5
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
Next

'================================================================
'=
'================================================================
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 WinPoint As POINTAPI
    Var hWnd As Long
    Var ClsNameBuf As String * 128
    Var ClsNameLen As Long
    Var Ret As Long

    'カーソル位置のスクリーン座標を取得
    Ret = Api_GetCursorPos(WinPoint)

    '座標を表示
    Text(3).SetWindowText "(" & Str$(WinPoint.x) & "," & Str$(WinPoint.y) & ")"

    '座標を含むウィンドウのハンドルを取得
    hWnd = Api_WindowFromPoint(WinPoint.x, WinPoint.y)

    'ウィンドウのハンドルを取得できたときは
    If hWnd <> 0 Then

        'ウィンドウのハンドルを表示
        Text(4).SetWindowText hex$(hWnd)

        'ウィンドウのクラス名を取得
        ClsNameLen = Api_GetClassName(hWnd, ClsNameBuf, Len(ClsNameBuf))

        'ウィンドウのクラス名を表示
        Text(5).SetWindowText Left$(ClsNameBuf, InStr(ClsNameBuf, Chr$(0)) - 1)
    End If
End Sub

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