Hallo,
ja, daran liegt es. Vielleicht ist SysTreeView bei Dir kein direktes Kind der App, sondern ein Enkel. So ist es beim Windows-Explorer wohl auch, denn da gibt es erst mal auch kein SysTreeView.
Und hat Dein Script das TreeView gefunden?
Ich würde mit EnumChildWindows alle Kinder durchgehen und versuchen diese nach SysTreeView abzufragen. Aber ggf. ist es auch ein Urenkel,dann wird es umfangreicher....
In Deinem Code weiter oben hast Du ja die Subs, die auch den Klassennamen ermitteln. M.E. ist das aber nicht nötig. Ich denke, muss man mal austesten, dass die Abfrage nach SysTreeView ausreichen müsste.
Hier ein Vorschlag (Teilcode)
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 |
|
Private Declare PtrSafe Function EnumChildWindows Lib "user32" ( _
ByVal hWndParent As LongPtr, ByVal lpEnumFunc As LongPtr, _
ByVal lParam As LongPtr) As Long
Sub ErmittleTreeViewElemente()
Dim hWnd As LongPtr, hItem As LongPtr, hItem2 As LongPtr
Dim iAnz As Long, iAnzMax As Long
Set mWSh = Tabelle1 ' <<<Zielblatt vorgeben >>>
' Handle der App ermitteln
hWnd = FindWindowA("wndclass_desked_gsk", vbNullString) ' Handle des VBE-Editor holen
hWnd = FindWindowExA(hWnd, 0, "PROJECT", vbNullString) ' Projekt-Handle
If hWnd = 0 Then
MsgBox "Die gewünschte App wurde nicht gefunden!", vbCritical, "TreeView"
Exit Sub
End If
' TreeView vorhanden?
mhTree = FindWindowExA(hWnd, 0, "SysTreeView32", vbNullString)
If mhTree = 0 Then
Call EnumChildWindows(hWnd, AddressOf EnumWindowProc, 0)
End If
If mhTree = 0 Then
MsgBox "Die App enthält kein TreeView-Element!"
Exit Sub
End If
iAnzMax = CLng(SendMessageA(mhTree, TVM_GETCOUNT, 0, ByVal 0&)) ' Anzahl der Elemente
miZeile = 1
' Root-Knoten abrufen &H0 = TVGN_ROOT
........
|
_________
viele Grüße
Karl-Heinz
|