Uups wie peinlich.
Der vorher gepostete Code funktioniert nur mit Strict Off und Explicit Off. Hier der überarbeitete (Strict On und Explicit On) Code:
Option Strict On
Option Explicit On
Imports System.Runtime.InteropServices
Public Partial Class MainForm
Public Const TV_FIRST as Integer = 4352
Public Const TVSIL_NORMAL as Integer = 0
Public Const TVSIL_STATE as Integer = 2
Public Const TVM_SETIMAGELIST as Integer = TV_FIRST + 9
Public Const TVM_GETNEXTITEM as Integer = TV_FIRST + 10
Public Const TVIF_HANDLE as Integer = 16
Public Const TVIF_STATE as Integer = 8
Public Const TVIF_IMAGE as Integer = 2
Public Const TVIS_STATEIMAGEMASK as Integer = 61440
Public Const TVM_SETITEM as Integer = TV_FIRST + 13
Public Const TVGN_ROOT as Integer = 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, 0, tvi)
pszText = new IntPtr(LocalAlloc(&H40, MY_MAXLVITEMTEXT))
tvi.mask = TVIF_TEXT
tvi.hItem = hRoot
tvi.cchTextMax = MY_MAXLVITEMTEXT
tvi.pszText = pszText
SendMessage(Me.TreeView1.Handle, TVM_GETITEM, 0, tvi)
buffer = Marshal.PtrToStringUni(tvi.pszText, MY_MAXLVITEMTEXT)
Debug.WriteLine (buffer)
MessageBox.Show (buffer)
End Sub
End Class |