In deinem Code fehlt auch irg.wie das/ein Handle (TVITEM.hItem / tvi.hItem = hRoot) auf ein entsprechendes Root- oder SelectedNode. Naja, wie auch immer - nach einigen Tests mit der Win32API ist es mir (doch noch ) gelungen den Text des erstens (Root)Nodes auszulesen. Hier der Code:
Imports System.Runtime.InteropServices
Public Partial Class MainForm
Public Const TV_FIRST = 4352
Public Const TVSIL_NORMAL = 0
Public Const TVSIL_STATE = 2
Public Const TVM_SETIMAGELIST = TV_FIRST + 9
Public Const TVM_GETNEXTITEM = TV_FIRST + 10
Public Const TVIF_HANDLE = 16
Public Const TVIF_STATE = 8
Public Const TVIF_IMAGE = 2
Public Const TVIS_STATEIMAGEMASK = 61440
Public Const TVM_SETITEM = TV_FIRST + 13
Public Const TVGN_ROOT = 0
Public Const TVM_GETITEM As Integer = TV_FIRST + 62
Public Const MY_MAXLVITEMTEXT As Integer = 260
Private Const TVIF_TEXT As Int32 = &H1
<StructLayout(LayoutKind.Sequential, Pack:=8, CharSet:=CharSet.Auto)> _
Public Structure TVITEM
Dim mask As Integer
Dim hItem As IntPtr
Dim state As Integer
Dim stateMask As Integer
Dim pszText As IntPtr
Dim cchTextMax As Integer
Dim iImage As Integer
Dim iSelectedImage As Integer
Dim cChildren As Integer
Dim lParam As IntPtr
End Structure
<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
<DllImport("User32.dll", CharSet:=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
Private Declare Function LocalAlloc _
Lib "kernel32.dll" (ByVal wFlags As Int32, ByVal wBytes As Int32) As Int32
Public Sub New()
' The Me.InitializeComponent call is required for Windows Forms designer
' support.
Me.InitializeComponent()
'
' TODO : Add constructor code after InitializeComponents
'
End Sub
Sub MainFormLoad(ByVal sender As Object, ByVal e As EventArgs)
'// FillTreeView()
End Sub
Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
Dim tvi As New TVITEM
Dim hWnd As IntPtr = Me.treeView1.Handle
Dim pszText As IntPtr = IntPtr.Zero
DIm buffer as string = nothing
Dim hRoot As IntPtr = IntPtr.op_Explicit(SendMessage(hWnd, TVM_GETNEXTITEM, _
TVGN_ROOT, 0))
tvi.hItem = hRoot
tvi.state = 0
SendMessage(Me.TreeView1.Handle, TVM_GETITEM, IntPtr.Zero, tvi)
pszText = LocalAlloc(&H40, MY_MAXLVITEMTEXT)
tvi.mask = TVIF_TEXT
tvi.hItem = hRoot
tvi.cchTextMax = MY_MAXLVITEMTEXT
tvi.pszText = pszText
SendMessage(Me.TreeView1.Handle, TVM_GETITEM, IntPtr.Zero, tvi)
buffer = Marshal.PtrToStringUni(tvi.pszText, MY_MAXLVITEMTEXT)
Debug.WriteLine (buffer)
MessageBox.Show (buffer)
End Sub
End Class |