|  
                                             Hallo, 
ich habe mich mit dem TreeView noch nicht näher beschäftigt, was ich jetzt aber nachholen werde. Wird aber dauern. 
Unten ein Beispiel, was nicht abstürtzt und einen Text holt. Leider wird nur ein Item geholt, warum weiß ich noch nicht. 
Da ich DIFF nicht habe, habe ich es mit dem VBE-Tree probiert. Du kannst ja mal mit DIFF weitertüfteln 
Der ganzen andere Kram, den Du da hattest, ist m.E. überflüssig. Aber das musst Du wissen. 
BTW: Vergiss PostMessage. Ich verwende das nur zum Schließen von Fenstern. Die Message wird in die Warteschleife eingestellt und irgendwann mal abgarbeitet. 
Für das Steuern und Auslesen von Childwindows (Button, Edit, Combo usw.) solltest Du ausschließlich SendMessage verwenden, die wird sofort verarebitet. 
  
Code: 
  
	
		
			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 | 
			  | 
			
			 ' API-Deklarationen 
			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_GETNEXTITEM As Long = TV_FIRST + 10 
			Const TVM_GETITEM As Long = TV_FIRST + 12 
			Const TVGN_ROOT   As Long = &H0 
			Const TVGN_NEXT   As Long = &H1 
			Const TVIF_TEXT   As Long = &H1 
			 
			' TreeView-Item Struktur 
			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, hItem As LongPtr 
			  Dim TVI    As TVITEM 
			  Dim iZeile As Long 
			 
			' Fenster "Diff" suchen 
			' hWnd = FindWindowA(vbnullstring, "Diff") 
			  hWnd = FindWindowA("wndclass_desked_gsk", vbNullString)   ' Handle des VBE-Editor holen 
			  hWnd = FindWindowExA(hWnd, 0, "PROJECT", vbNullString) 
			  If hWnd = 0 Then 
			     MsgBox "Fenster mit Titel  ' Diff' nicht gefunden!", vbCritical, "TreeView"" 
			     Exit Sub 
			  End If 
			' TreeView vorhanden? 
			  hWnd = FindWindowExA(hWnd, 0, "SysTreeView32", vbNullString) 
			  If hWnd = 0 Then 
			     MsgBox "Fenster enthält kein TreeView-Steuerelement!" 
			     Exit Sub 
			  End If 
			' Root-Knoten abrufen 
			  hItem = SendMessageA(hWnd, TVM_GETNEXTITEM, TVGN_ROOT, ByVal 0&) 
			  If hItem = 0 Then 
			     MsgBox "Kein Root-Knoten gefunden!", vbCritical, "TreeView" 
			     Exit Sub 
			  End If 
			 
			  Do While hItem <> 0 
			     With TVI                                   ' TVITEM initialisieren 
			         .mask = TVIF_TEXT                      ' und Knoteninformationen abrufen 
			         .hItem = hItem 
			         .pszText = String(256, vbNullChar)     ' Puffer initialisieren 
			         .cchTextMax = 256 
			         If SendMessageA(hWndTree, 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 Knotens: " & hItem 
			         End If 
			     End With 
			     ' Nächsten Knoten abrufen 
			     hItem = SendMessageA(hWnd, TVM_GETNEXTITEM, TVGN_NEXT, hItem) 
			  Loop 
			 
			  MsgBox "Fertig! Knoten wurden ab Spalte E eingefügt." 
			End Sub 
			 | 
		 
	
 
  
 
 
_________ 
viele Grüße 
Karl-Heinz 
     |