![]() |
Fenster einer Fremdapplikation auslesen / positionieren
Hallöchen!
Damit sich nicht wieder jemand beschwert versuche ich mich so klar wie möglich auszudrücken. :angel: Es gibt da eine Fremdapplikation, welche mehrere verschiebbare Fenster hat. Leider haben die Programmierer dieses Programms nicht bedacht, dass es extrem nervig ist wenn man nach jedem Neustart der Software erst die vielen Fenster wieder angenehm positionieren muss bevor man damit arbeiten kann. Sagen wir mal es gehen acht Fenster an ein und derselben Position auf und der Anwender muss diese nun jedes Mal neu positionieren sodass er alle angenehm im Blick hat. Daher möchte ich ein kleines Programm schreiben, dass die aktuellen Fensterpositionen der Fremdanwendung ausliest (welche vom User angeordnet wurden), diese speichert und bei einem Neustart der Fremdanweisung die Fenster mittels eines Klickes wieder so wie abgespeichert anordnet. Die Frage ist nur wie. :D Das Auslesen der Fenster-Handles bringt nicht wirklich etwas, da sich die Handles seltsamerweise immer ändern. Alle Fenster haben die gleiche Größe. Hat jemand eine Idee wie man das am besten bewerkstelligen könnte? |
Re: Fenster einer Fremdapplikation auslesen / positionieren
Du musst die Fenster irgendwie identifizieren, am besten über den Fensterklassennamen. Mit EnumThreadWindows iterierst beim Beenden der Applikation durch die Fenster und speicherst für jedes Fenster den Klassennamen und die Positionsdaten. Beim Neustart stellst du die Positionen wieder her.
|
Re: Fenster einer Fremdapplikation auslesen / positionieren
Hast du dafür vlt. ein paar kleine Beispiele oder Referenzen, da ich nicht so bewandert in Delphi bin, jedenfalls nicht was sowas angeht. Danke Dir.
|
Re: Fenster einer Fremdapplikation auslesen / positionieren
Nimm
![]() Weil ich so nett bin: ![]() |
Re: Fenster einer Fremdapplikation auslesen / positionieren
Danke jfheins, bist ja wirklich ein Netter. :-)
Also WinSpy hab ich mir geholt. Er zeigt mir auch alle Informationen zu den aktiven Fenster an, also Koordinaten, Klasse und das Handle. Nur wie gesagt, hat jedes Fenster immer ein anderes Handle. Wie kann ich nun alle aktiven Fenster auslesen, die Positionen speichern und beim nächsten Start die Position der Fenster automatisch ausrichten? Beim nächsten Start sind dann andere Fenster und somit andere Handles!? Der Code-Generator geht bei mir gar nicht. Ich rufe ihn in einer VM auf, nach 5min Sanduhr kann ich den Task WinSpy nur noch abschießen. :? |
Re: Fenster einer Fremdapplikation auslesen / positionieren
Zitat:
Zitat:
Also du startest WinSpy, klickst auf den Button "Fenster auswählen" hältst die Maustaste gedrückt, und ziehst sie auf das Fenster deiner Wahl. Jetzt sollte in der Treeview was sein, und du müsstest den Code generieren können :gruebel: Mit WinSpy selber kannst du die Positionen nicht speichern, aber es kann dir helfen, ein derartiges Programm selber zu programmieren ;) |
Re: Fenster einer Fremdapplikation auslesen / positionieren
Hallo jfheins,
es tut mir Leid aber ich habe mich wohl vertan. Jetzt geht es. Nur leider, bringt mich das nicht weiter. WinSpy spuckt jetzt so etwas aus:
Delphi-Quellcode:
Wie du siehst, steht ein Name in der Caption der fremden Fenster. Das heißt, jedes Fenster bei jedem User bei jedem Mal hat einen anderen Namen. Somit würde FindWindow() wie ich mir das denke fehlschlagen. Ich müsste also irgendwie alle Fenster von XXXXDEVICE auslesen, dann deren Position bekommen und das irgendwie speichern. Dann ist angedacht, dass der User bei dem fremden Programm sagen wir 5 Fenster öffnet und mein Programm dann diese 5 Fenster so positioniert wie die Position beim ersten Mal (wo mein Programm die Positionen gespeichert hat). Nur irgendwie, komme ich nicht weiter. :-(
var
wndMain: HWND; begin wndMain := FindWindow('XXXXDEVICE','User: XXXXX'); if wndMain <> 0 then begin ShowMessage('Window Handle: ' + IntToStr(wndMain)); FlashControl(wndMain); // internal function end; end. Zitat:
|
Re: Fenster einer Fremdapplikation auslesen / positionieren
Wenn die Captiuon veränderlich ist hast du 2 Möglichkeiteen:
1. Sie ist dir egal, dann ändere den Parameter in nil also z.B.
Delphi-Quellcode:
Dann kann es aber sein, dass das nicht genau das gesuchte Fenster ist, in diesem Fall ==> 2.
FindWindow('XXXXDEVICE',nil);
2. Sie ist wichtig zur Unterscheidung. In diesem Fall kannst du mit enumwindows alle Fenster durchgehen, um dein Fenster zu finden. Im Callback kannst du dann genau überprüfen, ob das Fenster das gesuchte ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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