指定されたウィンドウハンドルの名前を取得する(GetWindowText)

user32.dll の GetWindowText を用いて、ウィンドウハンドルの名前を取得します。
サンプルのダウンロード

このカテゴリーの先頭へ このページの先頭へ

■サンプルの説明

起動したところ
起動すると、こんな画面が表示されます。自アプリケーション・他アプリケーション問わず、マウスポインタの位置のウィンドウのテキストを取得します。

このカテゴリーの先頭へ このページの先頭へ

■コード

F0009_GetWindowText.vb
Imports System.Runtime.InteropServices
''' <summary>
''' GetWindowText(user32.dll)
''' </summary>
Partial Public Class F0009_GetWindowText

    ''' <summary>
    ''' GetWindowText(指定されたウィンドウハンドルの名前を取得)の宣言
    ''' </summary>
    <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    Private Shared Function GetWindowText(ByVal hwnd As IntPtr, _
                                           ByVal lpString As System.Text.StringBuilder, _
                                           ByVal cch As Integer) _
                                           As Integer
    End Function

    ''' <summary>
    ''' GetWindowTextLength
    ''' (指定されたウィンドウのタイトルバーテキストの文字数を取得)の宣言
    ''' </summary>
    <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    Private Shared Function GetWindowTextLength(ByVal hwnd As IntPtr) _
                                                As Integer
    End Function

    ''' <summary>
    ''' WindowFromPoint(指定された座標を含むウィンドウのハンドルを取得)の宣言
    ''' </summary>
    <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    Private Shared Function WindowFromPoint(ByVal lpPoint As POINT) _
                                            As IntPtr
    End Function

    ''' <summary>
    ''' GetCursorPos(マウスの座標を取得)の宣言
    ''' </summary>
    <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    Private Shared Function GetCursorPos(ByRef lpPoint As POINT) _
                                         As Boolean
    End Function

    ''' <summary>
    ''' POINT 構造体
    ''' </summary>
    Private Structure POINT
        Public X As Integer
        Public Y As Integer
    End Structure

    ''' <summary>
    ''' ロード時のイベント
    ''' </summary>
    Private Sub F0009_GetWindowText_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.Text = "F0009_GetWindowText"
        Me.Label1.Text = ""
        Me.Label2.Text = ""
        Me.Timer1.Interval = 100
        Me.Timer1.Start()
    End Sub

    ''' <summary>
    ''' 指定したタイマの間隔が経過した時のイベント
    ''' </summary>
    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim lpPoint As POINT
        'マウス座標を取得
        GetCursorPos(lpPoint)
        Me.Label1.Text = "X:" + lpPoint.X.ToString() + " Y:" + lpPoint.Y.ToString()

        'マウス座標よりハンドル取得
        Dim hwnd As IntPtr
        hwnd = WindowFromPoint(lpPoint)
        If hwnd.ToInt32() <= 0 Then
            'ハンドル取得失敗
            Me.Label2.Text = ""
            Exit Sub
        End If

        'タイトルバーの文字数取得
        Dim length As Integer = GetWindowTextLength(hwnd)
        If length <= 0 Then
            Exit Sub
        End If

        'タイトルバーの文字取得
        Dim lpStringBuf As System.Text.StringBuilder
        lpStringBuf = New System.Text.StringBuilder("", length + 1)

        GetWindowText(hwnd, lpStringBuf, lpStringBuf.Capacity)
        Me.Label2.Text = lpStringBuf.ToString()
    End Sub

End Class
このカテゴリーの先頭へ このページの先頭へ

■参考資料

GetWindowText