![]() |
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 |
AW: Wie Handle eines "Unterfensters" finden?
|
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 ![]() |
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:
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??
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; |
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?
|
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 19:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz