Hallo,
ich versuche gerade Spy++ nachzubilden, sprich alle Fenster und deren Unterfenster anzuzeigen, jedoch ist mein Ergebnis komplett anders, meine Funktionen:
Aufruf:
In Spy++ sind z.B. bei Skype alle Controls untereinander, was bei mir jedoch leider nicht der Fall ist (bei mir hat eher fast jedes Control ein eigenes TreeNode), aber ich weiß nicht, wie ich EnumChildWindows sonst noch benutzen soll..
ich versuche gerade Spy++ nachzubilden, sprich alle Fenster und deren Unterfenster anzuzeigen, jedoch ist mein Ergebnis komplett anders, meine Funktionen:
VB.NET-Quellcode
- Private Declare Function GetLength Lib "user32.dll" Alias "SendMessageA" (ByVal handle As IntPtr, ByVal uMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
- Private Declare Function GetString Lib "user32.dll" Alias "SendMessageA" (ByVal handle As IntPtr, ByVal uMsg As Integer, ByVal wParam As Integer, ByVal lParam As StringBuilder) As Integer
- Private Declare Function EnumChildWindows Lib "user32.dll" (ByVal window As IntPtr, ByVal callback As EnumWindowProc, ByVal i As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
- Private Delegate Function EnumWindowProc(ByVal hWnd As IntPtr, ByVal parameter As IntPtr) As Boolean
- Private Const WM_GETTEXT As Integer = &HD
- Private Const WM_GETLENGTH As Integer = &HE
- Public Function GetText(ByVal handle As IntPtr) As String
- Dim length As Integer = GetLength(handle, WM_GETLENGTH, 0, 0)
- Dim sb As New StringBuilder(length)
- GetString(handle, WM_GETTEXT, length + 1, sb)
- Return sb.ToString
- End Function
- Public Function GetChildWindows(ByVal handle As IntPtr) As List(Of IntPtr)
- Dim result As New List(Of IntPtr)()
- Dim listHandle As GCHandle = GCHandle.Alloc(result)
- Try
- Dim childProc As New EnumWindowProc(AddressOf EnumWindow)
- EnumChildWindows(handle, childProc, GCHandle.ToIntPtr(listHandle))
- Finally
- If listHandle.IsAllocated Then
- listHandle.Free()
- End If
- End Try
- Return result
- End Function
- Private Function EnumWindow(ByVal handle As IntPtr, ByVal pointer As IntPtr) As Boolean
- Dim gch As GCHandle = GCHandle.FromIntPtr(pointer)
- Dim list As List(Of IntPtr) = TryCast(gch.Target, List(Of IntPtr))
- list.Add(handle)
- Return True
- End Function
Aufruf:
VB.NET-Quellcode
In Spy++ sind z.B. bei Skype alle Controls untereinander, was bei mir jedoch leider nicht der Fall ist (bei mir hat eher fast jedes Control ein eigenes TreeNode), aber ich weiß nicht, wie ich EnumChildWindows sonst noch benutzen soll..
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kraizy“ ()