Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fenster Handle bekommen. (https://www.delphipraxis.net/46803-fenster-handle-bekommen.html)

kingflo 31. Mai 2005 20:03


Fenster Handle bekommen.
 
Ich habe mal eine Frage und hoffe jemand kann mir helfen.

Also ich habe in einer ListBox koplette Pfade von Anwendungen, und möchte jetzt, wenn z.B die Anwendung an zweiter stelle lauft das Fenster bzw die Anwendung maximiert nach ganz forne setzten.

Also in der art so:

application:= 'C:\test.exe'
If application run then
begin
application.bringToFront;
application.windowstyle:=wsMaximized;
end;

das kann man doch bestimmt irgendiwe machen oder???

Denn ich habe nur beispiele gefunden, in denen gezeigt wird wie man eine Anwendung in den Vordergrund bringt wenn man den Fensternamen weiß. Aber den Fensternamen weiß ich nicht aber dafür den exe namen.

Ich hoffe mir kann jemand helfen

mfg

flo

SirThornberry 31. Mai 2005 20:12

Re: Fenster Handle bekommen.
 
das ganze ist nur beding möglich. Eine Anwendung kann mehre Fenster haben und dementsprechend müsstest du dich für eines der Fenster der Anwendung entscheiden. Zum Beispiel die Anwendung "Delphi32" hat mehre Fenster. Wonach sollte jetzt entschieden werden ob der Objectinspektor in den Fordergrund kommt, das Codefenster, der Formdesigner etc...?

im Gegensatz dazu kann es auch Anwendungen geben die gar kein Fenster haben.

kingflo 31. Mai 2005 20:17

Re: Fenster Handle bekommen.
 
das dürfte nicht so schlimm werden, denn die Anwendungen in der ListBox haben nur ein Fenster, und wenn nicht dann sollte am bessten das Hauptfenster angezeigt werden oder alle.

SirThornberry 31. Mai 2005 20:57

Re: Fenster Handle bekommen.
 
bei einer Anwendung gibt es kein Hauptfenster, alle Fenster sind gleichberechtigt...
Der Lösungsweg sollte über EnumWindows gehen und dann musst du von jedem Fenster(handle) den Exenamen ermitteln. (mal im Forum suchen).

kingflo 31. Mai 2005 21:09

Re: Fenster Handle bekommen.
 
Kann man das nicht einfacher machen, denn die anwendungen in der ListBox werden vorher sowieso per shellExecute gestartet. Kann man es dann nicht irgendwie machen, das man ein Handle oder eine variable mitgibt, und diese dann wieder benutzen kann.

denn so starte ich die anwendungen bis jetzt:


Code:
memo1.Clear;memo1.Lines.Clear;
anwbox.ItemIndex:=0;
while anwbox.ItemIndex< anwbox.Items.Count do
begin          
 memo1.Lines.Add(anwbox.Items.strings[anwbox.itemIndex]+' wird gestartet...');
 if FileExists(anwbox.Items.strings[anwbox.itemIndex]) then                                     // wenn gefunden
 ShellExecute(Handle,'open',PChar(anwbox.Items.strings[anwbox.itemIndex]),nil,nil,SW_HIDE) ;
 memo1.Lines.Add(anwbox.Items.strings[anwbox.itemIndex]+' wurde geladen!');
 anwbox.ItemIndex:=anwbox.ItemIndex+1;
end;
und danach soll nämlich dann ein Timer laufen, der die Anwendungen der reihe nach z.B nach 5 sekunden in den vordergrund holt also erst anwendung 1 dann anwendung 2 usw...

Luckie 31. Mai 2005 21:38

Re: Fenster Handle bekommen.
 
Starte die Anwendung mit ShellexecuteExShellexecuteEx, da hast du eine ProzessID. Dann gehst du alle Fenster durch und guckst mit MSDN-Library durchsuchenGetWindowThreadProcessId ob das Fenster zum Prozess gehört. Wenn du mehrere Fenster findest, dann musst du selbst sehen, was du dann machst.

Alternativ kannst du auch mit MSDN-Library durchsuchenFindeWindow das Fensterhandle holen, musst dann aber den genauen Fenstertext kennen. Oder du nimmst MSDN-Library durchsuchenEnumWindows, holst dir den kompletten Titel und vergleichst in mit dem, was du kennst Delphi-Referenz durchsuchenpos.

kingflo 31. Mai 2005 21:58

Re: Fenster Handle bekommen.
 
Zitat:

Zitat von Luckie
Starte die Anwendung mit ShellexecuteExShellexecuteEx, da hast du eine ProzessID. Dann gehst du alle Fenster durch und guckst mit MSDN-Library durchsuchenGetWindowThreadProcessId ob das Fenster zum Prozess gehört. Wenn du mehrere Fenster findest, dann musst du selbst sehen, was du dann machst.


Das hört sich doch schon gut an hast du da zufällig ein Codebeispiel?

Luckie 31. Mai 2005 22:02

Re: Fenster Handle bekommen.
 
Klick auf den Link, dann solltest du ein Codeschnippsel in der Code-Lib finden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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