Autor |
Beitrag |
galagher
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 16.08.17 18:59
Frühlingsrolle hat folgendes geschrieben : | Richtig, in der GetSpecificWindowCaption() Methode haben wir die Funktion EnumWindows() aufgerufen. EnumChildWindows() ist wiederum etwas anderes, wie der Name schon sagt. |
Wer lesen kann, ist klar im Vorteil!
Nein danke, das ist mir zu kompliziert:
Win API Hilfe hat folgendes geschrieben: | Die Funktion EnumChildWindows zählt die untergeordneten Fenster des festgelegten übergeordneten Fensters auf, indem das Handle jedes untergeordneten Fensters an die anwendungsunterstützte Callback-Funktion übergeben wird.
[...]
WndParent Legt das übergeordnete Fenster fest, dessen untergeordnetes Fenster aufgelistet werden sollen.
EnumFunc Ist die Adresse der Callback-Funktion. Diese Adresse muß mit Hilfe der Funktion MakeProcInstance erzeugt worden sein. [...]
lParam Legt den Wert fest, der an die Callback-Funktion zur Verwendung in der Anwendung übergeben wird. [...]
[...]
Diese Funktion listet nicht obenliegende Fenster, die zu dem übergeordneten Fenster gehören, auf.
Hat ein Sekundär-Fenster eigene Sekundär-Fenster erzeugt, listet die Funktion diese Fenster ebenfalls auf.
Ein Sekundär-Fenster, das während des Auflistungsprozesses in der Z-Richtung bewegt oder repositioniert wird, wird korrekt aufgelistet. Die Funktion listet ein Sekundär-Fenster, das zerstört wird, bevor es erfaßt wird, oder das während des Auflistungsprozesses erzeugt wird, nicht auf. |
Was ist unter Windows das "festgelegte übergeordnete Fenster"? Hier also wohl der Desktop. Wie komme ich an das Handle des Desktops? Wie erhalte ich die anderen Parameter?
Ich mache hier Schluss.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 16.08.17 19:19
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
galagher
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 16.08.17 19:37
Mit EnumChildWindows(hWnd(0), @GetAllWindows, Integer(tmp)); kompiliert es zwar, aber mit dem gleichen Effekt: Nur im aufrufende Fenster finden irgendwelche Änderungen zB. in TEdit statt.
Der Aufruf sieht so aus: SendText2('Form1', 'TEdit', 'Neuer Edit-Text');
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 16.08.17 20:00
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
galagher
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 16.08.17 20:56
Frühlingsrolle hat folgendes geschrieben : | hWnd(0) sieht merkwürdig aus, allein schon wegen den runden Klammern. |
Ja, es wird aber ein (Integer-)Wert verlangt. Welcher? Keine Ahnung, hab's halt mit 0 versucht!
Ohne Wert in Klammern gibt Delphi die Meldung "[dcc32 Fehler] [...]: E2029 '(' erwartet, aber ',' gefunden" aus.
EnumChildWindows erwartet andererseits als ersten Parameter hWndParent: HWND, also verstehe ich nicht, warum da ein Wert in Klammern verlangt wird...
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 16.08.17 21:05
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
galagher
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 16.08.17 21:17
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Do 17.08.17 19:48
Ich habe mir jetzt eine Funktion GetHandle gebaut:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function GetHandle(const SubText: string): THandle; var aHandle: THandle; begin aHandle := FindWindow(nil, PChar(SubText));
if aHandle <> 0 then Result := FindWindowEx(aHandle, 0, PChar(ControlClassName), PChar(SubText)) else Result := 0; end; |
Die rufe ich für EnumChildWindows so auf:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| begin if (AList <> nil) and (SubText <> '') then begin tmp := TStringList.Create; try aHandle := GetHandle(SubText); EnumChildWindows(aHandle, @GetAllWindows, Integer(tmp)); |
Mit dem Ergebnis, dass es immer noch nur bei genau dem aufrufenden Fenster funktioniert, bei anderen nicht, da ist es nach wie vor nil.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
|