2013-01-23 110 views
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 

我该怎么办呢?

+0

你见过这个网站吗? http://pinvoke.net/ – WraithNath

+0

你的意思是你想'FindWindow'标题? – spajce

+0

@WraithNath当然,我看到了这个网站。 – sthml

回答

1

你可以得到一个窗口的标题与GetWindowText功能。你需要对它进行p/invoke。你可以在pinvoke.net找到这个示例代码。

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 
+1

请不要从其他来源不归属复制代码。这确实是非常糟糕的形式。 –

+0

对不起! &THNX提醒! –