01 
			02 
			03 
			04 
			05 
			06 
			07 
			08 
			09 
			10 
			11 
			12 
			13 
			14 
			15 
			16 
			17 
			18 
			19 
			20 
			21 
			22 
			23 
			24 
			25 
			26 
			27 
			28 
			29 
			30 
			31 
			32 
			33 
			34 
			35 
			36 
			37 
			38 
			39 
			40 
			41 
			42 
			43 
			44 
			45 
			46 
			47 
			48 
			49 
			50 
			51 
			52 
			53 
			54 
			55 
			56 
			57 
			58 
			59 
			60 
			61 
			62 
			63 
			64 
			65 
			66 
			67 
			68 
			69 
			70 
			71 
			72 
			73 
			74 
			75 
			76 
			77 
			78 
			79 
			80 
			81 
			82 | 
			  | 
			
			 Option Explicit 
			Private Declare PtrSafe Function FindWindowA Lib "user32" ( _ 
			        ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr 
			Private Declare PtrSafe Function FindWindowExA Lib "user32" ( _ 
			        ByVal hWndParent As LongPtr, ByVal hWndChildAfter As LongPtr, _ 
			        ByVal lpszClass As String, ByVal lpszWindow As String) As LongPtr 
			Private Declare PtrSafe Function SendMessageA Lib "user32" ( _ 
			        ByVal hWnd As LongPtr, ByVal Msg As Long, _ 
			        ByVal wParam As LongPtr, lParam As Any) As LongPtr 
			 
			 
			' Konstanten für TreeView-Operationen 
			Const TV_FIRST     As Long = &H1100 
			Const TVM_GETCOUNT As Long = TV_FIRST + 5 
			Const TVM_GETNEXTITEM As Long = TV_FIRST + 10 
			Const TVM_GETITEM  As Long = TV_FIRST + 12 
			Const TVGN_ROOT    As Long = &H0 
			Const TVGN_CHILD   As Long = &H4 
			Const TVGN_NEXT    As Long = &H1 
			 
			Type TVITEM 
			     mask           As Long 
			     hItem          As LongPtr 
			     STATE          As Long 
			     statemask      As Long 
			     pszText        As String 
			     cchTextMax     As Long 
			     iImage         As Long 
			     iSelectedImage As Long 
			     cChildren      As Long 
			     lParam         As LongPtr 
			End Type 
			 
			Sub EnumerateTreeView() 
			  Dim hWnd   As LongPtr, hTree As LongPtr, hItem As LongPtr 
			  Dim TVI    As TVITEM 
			  Dim iZeile As Long, iAnz As Long, iAnzMax As Long 
			 
			' Fenster "Diff" suchen 
			  hWnd = FindWindowA(vbNullString, "Diff") 
			  If hWnd = 0 Then 
			     MsgBox "Fenster mit Titel  ' Diff' nicht gefunden!", vbCritical, "TreeView"" 
			     Exit Sub 
			  End If 
			 
			' TreeView vorhanden? 
			  hTree = FindWindowExA(hWnd, 0, "SysTreeView32", vbNullString) 
			  If hTree = 0 Then 
			     MsgBox "Fenster enthält kein TreeView-Steuerelement!" 
			     Exit Sub 
			  End If 
			 
			' Root-Knoten abrufen 
			  hItem = SendMessageA(hTree, TVM_GETNEXTITEM, TVGN_ROOT, ByVal 0&) 
			  If hItem = 0 Then 
			     MsgBox "Kein Root-Knoten gefunden!", vbCritical, "TreeView" 
			     Exit Sub 
			  End If 
			  iAnzMax = CLng(SendMessageA(hTree, TVM_GETCOUNT, 0, ByVal 0&))   ' Anzahl der Elemente 
			 
			' Elemente durchgehen 
			  Do While hItem <> 0 
			     With TVI                                                      ' TVITEM initialisieren 
			         .mask = &H1   ' &H1 = TVIF_TEXT 
			         .hItem = hItem 
			         .pszText = String(256, vbNullChar)                        ' Puffer initialisieren 
			         .cchTextMax = 256 
			         If SendMessageA(hTree, TVM_GETITEM, 0, TVI) <> 0 Then 
			            ' Knoteninformationen in die Tabelle schreiben 
			            Cells(iZeile + 1, 5).Value = Left(.pszText, InStr(.pszText, vbNullChar) - 1) 
			            iZeile = iZeile + 1 
			         Else 
			            Debug.Print "Fehler beim Abrufen des Items: " & hItem 
			         End If 
			     End With 
			     ' Nächsten Knoten abrufen 
			     hItem = SendMessageA(hTree, TVM_GETNEXTITEM, TVGN_NEXT, ByVal hItem) 
			  Loop 
			 
			  MsgBox iZeile & " von" & Str(iAnzMax) & _ 
			  " Elementen wurden in Spalte E eingefügt!", vbInformation, "TreeView" 
			End Sub 
			 |