Hallo,
ich möchte in VisualBasic 2005 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)
<Runtime.InteropServices.StructLayout( _
Runtime.InteropServices.LayoutKind.Sequential, Pack:=8, _
CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Public Structure TVITEM
'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 _
<Runtime.InteropServices.DllImport("User32.dll", _
CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Public Overloads Shared Function SendMessage _
Public Function GetItem(ByRef pItem As TVITEM) As Boolean
End Class
Die Klasse wird in meinem Test-Formular, in welchem ein TreeView mit Testinhalt vorhanden ist (Me.TreeView1), iniziallisiert und aufgerufen:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Leider bleibt meine TVITEM Struktur immer leer und ich weis nun nicht mehr was ich noch ausprobieren soll. Kann es sein das ich irgendwie in die flasche Richtung denke?
Deshalb die ganz einfache Frage:
Was mache ich falsch?
Mfg Daniel
ich möchte in VisualBasic 2005 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<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 StructurePublic 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
'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 FunctionByVal wParam As Integer, ByVal lParam As Integer) As Integer
<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 FunctionByVal wParam As Integer, ByRef lParam As TVITEM) As Integer
Public Function GetItem(ByRef pItem As TVITEM) As Boolean
Try
End Function SendMessage(iHwndCls, TVM_GETITEM, Nothing, pItem)
Return True
Catch ex As ExceptionReturn True
Debug.Assert(False)
Trace.WriteLine("Fehler: Wo: " & _
ex.StackTrace & " Was: " & ex.Message)
Return False
End TryTrace.WriteLine("Fehler: Wo: " & _
ex.StackTrace & " Was: " & ex.Message)
Return False
Die Klasse wird in meinem Test-Formular, in welchem ein TreeView mit Testinhalt vorhanden ist (Me.TreeView1), iniziallisiert und aufgerufen:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Try
End Sub Dim oExTreeView As ExTreeViewCls
Dim oItem As ExTreeViewCls.TVITEM
oExTreeView = New ExTreeViewCls(Me.TreeView1.Handle)
oExTreeView.GetItem(oItem)
Catch ex As ExceptionDim oItem As ExTreeViewCls.TVITEM
oExTreeView = New ExTreeViewCls(Me.TreeView1.Handle)
oExTreeView.GetItem(oItem)
Debug.Assert(False)
Trace.WriteLine("Fehler: Wo: " & _
ex.StackTrace & " Was: " & ex.Message)
End TryTrace.WriteLine("Fehler: Wo: " & _
ex.StackTrace & " Was: " & ex.Message)
Leider bleibt meine TVITEM Struktur immer leer und ich weis nun nicht mehr was ich noch ausprobieren soll. Kann es sein das ich irgendwie in die flasche Richtung denke?
Deshalb die ganz einfache Frage:
Was mache ich falsch?
Mfg Daniel