1

すべてChild Windowsハンドルを取得したので、すべての子ウィンドウのキャプションをハンドルで
取得したいと考えています。
私のコード:

 For Each p As Process In Process.GetProcessesByName("MyProccess")
            Dim ChildrenList As New List(Of IntPtr)
            ChildrenList = GetChildWindows(p.MainWindowHandle)
            MsgBox(ChildrenList.Count) ' = 343
            For Each hh As IntPtr In ChildrenList

                 '  i want to do something like: MsgBox(getCaption(hh))

            Next
        Next

どうすればいいですか?

4

2 に答える 2

1

出典#1#2


キャプションとは、「ウィンドウのタイトルテキスト」を意味することを願っています

子ウィンドウのウィンドウハンドルのリストはすでに作成されています

休憩は簡単になります

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function GetWindowTextLength(ByVal hwnd As IntPtr) As Integer
    End Function

    Public Function GetText(ByVal hWnd As IntPtr) As String
        Dim length As Integer
        If hWnd.ToInt32 <= 0 Then
            Return Nothing
        End If
        length = GetWindowTextLength(hWnd)
        If length = 0 Then
            Return Nothing
        End If
        Dim sb As New System.Text.StringBuilder("", length + 1)

        GetWindowText(hWnd, sb, sb.Capacity)
        Return sb.ToString()
    End Function

使用法 :

 For Each p As Process In Process.GetProcessesByName("MyProccess")
            Dim ChildrenList As New List(Of IntPtr)
            ChildrenList = GetChildWindows(p.MainWindowHandle)
            MsgBox(ChildrenList.Count) ' = 343
            For Each hh As IntPtr In ChildrenList

                 Dim caption As String = GetText(hh)
                 ' use the caption the way u want

            Next
        Next
于 2013-01-23T15:29:35.787 に答える
1

関数を使用してウィンドウのタイトルを取得できますGetWindowText。あなたはそれにp/invokeする必要があります。このためのサンプルコードはpinvoke.netにあります。

于 2013-01-23T15:27:12.860 に答える