Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Wie Handle eines "Unterfensters" finden? (https://www.delphipraxis.net/186643-wie-handle-eines-unterfensters-finden.html)

Metschu 18. Sep 2015 20:38

Wie Handle eines "Unterfensters" finden?
 
Hallo zusammen,

zur Steuerung eines Externen Programms benötige ich das Handle eines Unterfensters, welches nach einer Aktion im Hauptfenster durch dieses geöffnet wird.
Folgende Probleme habe ich dabei:
* die Suche über den Namen ("FindWindow") scheidet aus, da dieses Fenster je nach Ergebnis der Aktion ein anderen Namen/Caption
* Es sind 2 Instanzen des Programms aktiv, so das das ich über eine Globale suche nicht feststellen kann, ob dies nun von A oder B geöffnet wurde.

Im Prinzip so etwas wie "Finde Unterfenster von Handle XY"...

Nach was muss ich hier suchen?


Danke schon mal!

Gruß

Torsten

DeddyH 18. Sep 2015 20:48

AW: Wie Handle eines "Unterfensters" finden?
 
Hilft Dir evtl. MSDN-Library durchsuchenEnumChildWindows oder MSDN-Library durchsuchenEnumThreadWindows weiter?

nuclearping 19. Sep 2015 21:27

AW: Wie Handle eines "Unterfensters" finden?
 
Was heisst "Unterfenster"? Ist das eine MDI Anwendung, von der du sprichst? Oder öffnet das Programm eine eigenständige neue Form?

Du kannst mit WinSpy auch die Fensterklasse finden lassen und dann mit FindWindow nach der Klasse suchen. Oder MSDN-Library durchsuchenFindWindowEx wäre evtl. auch eine Möglichkeit.

Metschu 20. Sep 2015 17:40

AW: Wie Handle eines "Unterfensters" finden?
 
Danke für die Antworten,

es ist keine MDI-Anwendung. Man kann immer nur eine Form bearbeiten.
Die Software öffnet dann eine 2. Form, auf der man weiter arbeiten kann.

"EnumChildWindows" habe ich schon getestet, aber es klappt nicht mit meinem Code.
Ich bekomme immer nur die Komponenten der Hauptform (Memo, Button, ..)angezeigt.
Eventuell habe ich mit der Stundenlagen Suche auch verrannt?
Delphi-Quellcode:
function EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export;
var
   Title, ClassName: array[0..255] of char;
begin
   Result := True;
   GetWindowText(wHandle, Title, 255);
   GetClassName(wHandle, ClassName, 255);
   lb.Items.Add(string(Title) + '-' + string(ClassName));
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
   EnumchildWindows(HandleDerHauptForm,@EnumWindowsProc, Integer(Listbox1));
end;
Das Problem mit "WinSPpy" und Suche nach der Klasse ist, das ich dann ja nicht zuordnen kann, ob das Fenster von der "Hauptprogramm 1"oder "Hauptprogramm 2" kommt, da die Hauptsoftware ja 2x Parallel auf dem Rechner läuft und somit ja die gleich Klasse haben, oder??

DeddyH 20. Sep 2015 18:46

AW: Wie Handle eines "Unterfensters" finden?
 
Wenn beide Instanzen das gleiche Fenster öffnen, ist das auch die gleiche Fensterklasse. Du bräuchtest wohl das Instanzen- oder Threadhandle bzw. dessen ID, um die Instanz sicher ansprechen zu können. Startest Du das Programm aus Deinem heraus, oder geschieht das durch den Benutzer oder per Autostart?

Metschu 20. Sep 2015 19:18

AW: Wie Handle eines "Unterfensters" finden?
 
Geplant ist, das beide Instanzen von meinem Programm aus gestartet werden.

Derzeit beim Test ist es aber noch so, das ich die Programme erstmal selbst starte, dann mit "EnumWindows" das Programm suche.
Klappt ja auch alles schon.
Bei zwei Instanzen kann ich dies ja am dem schon bekannten Handle unterscheiden.

Nur dann das "Unterfenster" zu finden, ist schwierig...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz