Announcement

Collapse
No announcement yet.

Externes TreeView auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Externes TreeView auslesen

    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)
    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 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

    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
    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. Kann es sein das ich irgendwie in die flasche Richtung denke?

    Deshalb die ganz einfache Frage:
    Was mache ich falsch?

    Mfg Daniel
Working...
X