AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fensterhandle aus ProcessID?

Ein Thema von S - tefano · begonnen am 14. Jun 2003 · letzter Beitrag vom 14. Jun 2003
Antwort Antwort
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#1

Fensterhandle aus ProcessID?

  Alt 14. Jun 2003, 16:17
Hi,

ich will gerne das Fenster eines Programms ToFront bringen. Dafür brauch ich ja ein Handle.
Das wiederum kann man ja z.B. über Findwindow bekommen.
Allerdings hat das Programm nicht immer denselben Fensternamen/-Titel, weshalb das schonmal wegfällt, da ich diesen Parameter nicht (immer) kenne.
Jetz hab ich in der JCL eine Funktion namens "GetApplicationWnd" gefunden, die mir das Handle aufrund der ProzessID wiedergibt. (will ich z.B. Word in den Vordergrund bringen, kann ich mir ne Prozessliste machen, nach Winword.exe suchen, die ProzessID ermitteln und diese dann der JCL- Funktion übergeben).
Allerdings hab ich in der Hilfe dazu nachgelesen, dass diese Funktion nur mit Delphi- Anwendungen funktioniert.
Und im Windows-SDK hab ich auch keine Funktion gefunden die mir ein Handle anhand der ProzessID übergibt.
K, gäbe es noch das Problem, dass wenn ein Prog mehrere Instanzen offen hat, es entweder nur einmal in der Liste steht oder mehrmals derselbe Dateiname.
Hm, ich glaub ich hab mich verzettelt.
Was ich jedenfalls möchte, ist eine Alternative zu Findwindow, die ein Handle aus einem anderen Parameter ermittelt, weil ich den Fensternamen nicht immer kenne.

Danke schonmal,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2
  Alt 14. Jun 2003, 16:21
Schonmal daran gedacht mit dem Klassennamen zu arbeiten..?
Manuel Pöter
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 14. Jun 2003, 16:38
Moin Stefano,

Du kannst ja mit EnumWindows alle Top-Level Fenster durchgehen, dann jedes mit IsWindowVisible auf Sichtbarkeit prüfen, und dann mit GetWindowThreadProcessId mit der gewünschten Prozess ID vergleichen, bis Du fündig geworden bist.

Müsste eigentlich funktionieren.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#4
  Alt 14. Jun 2003, 16:56
Hi,

irgendwie werd ich aus dem SDK- Eintrag zu EnumWindows nicht schlau.

BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);

Genauer gesagt versteh ich
1. nicht, was ich mit den Parametern anfangen soll bzw. was ich überhaupt übergeben soll (pointer to callback function )#
und
2. nicht, was überhaupt ne Callback Funktion ist, und wie ich das Ergebnis von EnumWindows (was wenn ichs richtig verstanden hab ein Handle ist) darin "empfange".
Und, EnumWindows gibt mir doch nur ein Handle zurück, oder? Oder gibt es mir ein Handle zurück, dann noch eins, dann noch eins usw. bis es keine TopLevel Windows mehr findet?
Und zu GetWindowThreadProcessId:
Als ersten Parameter muss ich dann ja das Handle aus EnumWindows zurückgeben (denk ich mal), und als zweiten? Nen Pointer? Oder einfach die Variable, in der nach dem Aufruf das Ergebnis stehen soll (irgendwie werd ich aus diesen SDK- Texten nich so richtig schlau)?

und @Motzi:
Erklär das bitte nochmal etwas genauer. Versteh nicht ganz wovon du jetz sprichst.

Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5
  Alt 14. Jun 2003, 17:37
Zu EnumWindows: Hier mal nachschauen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 14. Jun 2003, 17:39
Moin Stefano,

wenn Du hier im Forum mal nach EnumWindows suchst, müsstest Du einige Fundstellen haben.

Soviel vorab:
Zitat von S - tefano:
Oder gibt es mir ein Handle zurück, dann noch eins, dann noch eins usw. bis es keine TopLevel Windows mehr findet?
Ja, oder bis die (selbst zu deklarierende) Callback Funktion FALSE zurückgibt.
Unter EnumWindowsProc findest Du im PSDK auch, wie die Funktion aussehen muss. (stdcall nicht vergessen )

Der zweite Parameter von GetWindowThreadProcessId muss die Adresse einer Variablen sein, die die zugehörge Prozessnummer erhält.

Delphi-Quellcode:
var
  dwProcID : DWORD;

  GetWindowThreadProcessId(hWindow,@dwProcID);
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#7
  Alt 14. Jun 2003, 18:37
Huiuiuiuiui.
Also der Code, jbg (naja, eigentlich Luckie ), funktioniert schonmal, was mich sehr freut.
Jetz werd ich mir wohl ein bisschen Zeit nehmen müssen den auch zu verstehen...
Hätt ja schonmal nich gedacht dass dieses Prinzip, wie es CallbackFunktion geschimpft wird überhaupt existiert geschweigedenn funktioniert...
Aber das hilft mir schonmal sehr weiter.

Also dann, vielen Dank für die schnelle Hilfe,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  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 12:30 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