Hallo,
ich möchte ein TreeView über die Windows API auslesen.
Ziel ist es später das TreeView einer externen Anwendung auszulesen.
Um erstmal auf einen grünen Zweig zu kommen, lesen ich mein eigenes TreeView aus.
Dafür habe ich die ExTreeViewCls erstellt, mit desen Hilfe ich das TreeView auslesen möchte:
Public Class ExTreeViewCls
Dim iHwndCls As IntPtr
Public Sub New(ByVal hWnd As IntPtr)
iHwndCls = hWnd
End Sub
'Use a sequential structure layout to define TVITEM for the TreeView
' control.
<Runtime.InteropServices.StructLayout( _
Runtime.InteropServices.LayoutKind.Sequential, Pack:=8, _
CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Public Structure TVITEM
Public mask As Integer
Public hItem As IntPtr
Public state As Integer
Public stateMask As Integer
Public pszText As IntPtr
Public cchTextMax As Integer
Public iImage As Integer
Public iSelectedImage As Integer
Public cChildren As Integer
Public lParam As IntPtr
End Structure
'Messages
Public Const TV_FIRST As Integer = 4352
Public Const TVM_SETIMAGELIST As Integer = TV_FIRST + 9
Public Const TVM_GETNEXTITEM As Integer = TV_FIRST + 10
Public Const TVM_GETITEM As Integer = TV_FIRST + 12
Public Const TVM_SETITEM As Integer = TV_FIRST + 13
Public Const TVM_HITTEST As Integer = TV_FIRST + 17
Public Const TVM_SORTCHILDRENCB As Integer = TV_FIRST + 21
'TVM_GETNEXTITEM wParam
Public Const TVGN_ROOT As Integer = &H0
Public Const TVGN_NEXT As Integer = &H1
Public Const TVGN_CHILD As Integer = &H4
Public Const TVGN_CARET As Integer = &H9
<Runtime.InteropServices.DllImport("user32.dll")> _
Public Overloads Shared Function SendMessage _
(ByVal hWnd As IntPtr, ByVal Msg As Integer, _
ByVal wParam As Integer, ByVal lParam As Integer) As Integer
End Function
<Runtime.InteropServices.DllImport("User32.dll", _
CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Public Overloads Shared Function SendMessage _
(ByVal hWnd As IntPtr, ByVal msg As Integer, _
ByVal wParam As Integer, ByRef lParam As TVITEM) As Integer
End Function
Public Function GetItem(ByRef pItem As TVITEM) As Boolean
Try
SendMessage(iHwndCls, TVM_GETITEM, Nothing, pItem)
Return True
Catch ex As Exception
Debug.Assert(False)
Trace.WriteLine("Fehler: Wo: " & _
ex.StackTrace & " Was: " & ex.Message)
Return False
End Try
End Function
End Class Das ganz wird in meinem Test-Formular, in welchem ein TreeView mit Testinhalt vorhanden ist, aufgrufen:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim oExTreeView As ExTreeViewCls
Dim oItem As ExTreeViewCls.TVITEM
oExTreeView = New ExTreeViewCls(Me.TreeView1.Handle)
oExTreeView.GetItem(oItem)
Catch ex As Exception
Debug.Assert(False)
Trace.WriteLine("Fehler: Wo: " & _
ex.StackTrace & " Was: " & ex.Message)
End Try
End Sub Leider bleibt meine TVITEM Struktur immer leer und ich weis nun nicht mehr was ich noch ausprobieren soll.
Deshalb die ganz einfache Frage:
Was mache ich falsch?
Mfg Daniel
Brauchen Sie Hilfe, sind Sie in Not? Wir retten Sie mit unserem Code!
SolidWorks API-Programmierung |