AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fenster einer Fremdapplikation auslesen / positionieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster einer Fremdapplikation auslesen / positionieren

Ein Thema von The Riddler · begonnen am 18. Okt 2008 · letzter Beitrag vom 18. Okt 2008
Antwort Antwort
The Riddler
(Gast)

n/a Beiträge
 
#1

Fenster einer Fremdapplikation auslesen / positionieren

  Alt 18. Okt 2008, 12:46
Hallöchen!

Damit sich nicht wieder jemand beschwert versuche ich mich so klar wie möglich auszudrücken.

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. 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?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Fenster einer Fremdapplikation auslesen / positionieren

  Alt 18. Okt 2008, 13:13
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
The Riddler
(Gast)

n/a Beiträge
 
#3

Re: Fenster einer Fremdapplikation auslesen / positionieren

  Alt 18. Okt 2008, 13:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Fenster einer Fremdapplikation auslesen / positionieren

  Alt 18. Okt 2008, 13:40
Nimm Hier im Forum suchenWinSpy und alss dir den Code genereiren

Weil ich so nett bin: http://www.delphipraxis.net/internal...ghlight=winspy
  Mit Zitat antworten Zitat
The Riddler
(Gast)

n/a Beiträge
 
#5

Re: Fenster einer Fremdapplikation auslesen / positionieren

  Alt 18. Okt 2008, 14:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Fenster einer Fremdapplikation auslesen / positionieren

  Alt 18. Okt 2008, 16:18
Zitat von The Riddler:
Danke jfheins, bist ja wirklich ein Netter.
Das wollte ich hören

Zitat:
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.
Komisch

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

Mit WinSpy selber kannst du die Positionen nicht speichern, aber es kann dir helfen, ein derartiges Programm selber zu programmieren
  Mit Zitat antworten Zitat
The Riddler
(Gast)

n/a Beiträge
 
#7

Re: Fenster einer Fremdapplikation auslesen / positionieren

  Alt 18. Okt 2008, 18:19
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:
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.
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.

Zitat:
Das wollte ich hören
Für weitere Hilfe schmeiß ich dir gerne noch mehr Schmeicheleien zu.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Fenster einer Fremdapplikation auslesen / positionieren

  Alt 18. Okt 2008, 19:23
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.FindWindow('XXXXDEVICE',nil); Dann kann es aber sein, dass das nicht genau das gesuchte Fenster ist, in diesem Fall ==> 2.

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 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