AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fenstername und Dateiname aus Handle herausfinden

Fenstername und Dateiname aus Handle herausfinden

Ein Thema von Helmi · begonnen am 4. Mär 2012 · letzter Beitrag vom 18. Mär 2012
Antwort Antwort
Seite 3 von 4     123 4   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#21

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 10. Mär 2012, 14:43
Außerdem liegt es immer noch auf Deiner Internetseite, also stehst Du weiterhin zu dieser Deiner (angeblichen) "Jugendsünde".
Ich würde es hier einfach als Dokumentation der eigenen Vortschritte bezeichnen.

Nja, das ist halt so ... man lernt (hoffentlich) dazu und verbessert seine neueren Codes.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#22

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 10. Mär 2012, 18:34
da ja sowoesi alles bei mir opensource ist.
Einspruch, Euer Ehren! Was ist mit Deinem Flaggschiff, dem "XP Usermanager"?!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#23

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 10. Mär 2012, 18:35
Für DP-ler ist der immerhin kostenlos.
Und große Teile des Codes verstecken sich stückchenweise auch hier und da in der DP, bzw. auf seiner Webseite.

Wurde der schon mit Win8 getestet?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Mär 2012 um 18:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#24

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 11. Mär 2012, 08:46
so - jetzt lassen wir mal Luckies Schandtaten bei Seite - und kommen wieder zum eigentlichen Thema zurück, irgendwie hab ich da immer noch ein Verständnis-Problem.

Ich hab einen Fenster-Handle und möchte von der Application den Titel ermitteln.

Wenn ich Himitsu´s Beispiel richtig verstanden habe, dann kann ich mittels H := FindWindowEx(0, H, 'TApplication', nil); das Nicht-sichtbare Fenster des Fenster-Handles in H ermitteln.

Ich hab das mal bei mir umgesetzt:
Delphi-Quellcode:
function FensterText(Wnd: HWND): String;
var
  AWnd : HWND;
  WText: array[0..MAX_PATH - 1] of Char;

begin
  //Rückgabewert vordefinieren
  Result := '';

  //prüfen ob ein Fenster-Handle übergeben wurde
  If Wnd = 0 then
    exit;

  //Handle der Application zu dem Fenster auslesen
  AWnd := FindWindowEx(0, Wnd, 'TApplication', nil);

  //Fenster-Text auslesen
  If GetWindowText(AWnd, @WText, Length(WText)) > 0 then
    //Rückgabewert = Fenster-Name
    Result := String(WText)
  else
    //Rückgabewert = SystemFehler
    Result := SysErrorMessage(GetlastError);
end;
Ich habe (in einer Liste) die Fenster-Handles zweier unterschiedlicher Prozesse.
Bei dem ersten Fenster-Handle erhalte ich auch den richtigen Application-Titel.
Bei dem zweiten Handle immer den Titel des ersten Handles.
Oder ich erhalte beim zweiten Handle die Meldung "Das Fenster hat keine Bildlaufleisten"

Also entweder ich hab einen Gedankenfehler bei der Verwendung von FindWindowEx oder ich hab schlicht und einfach etwas am Code vergessen.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (11. Mär 2012 um 10:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#25

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 11. Mär 2012, 12:18
FindWindwoEx (mit hwndChildAfter=0) arbeitet wie FindWindow und findet das erste Fenster, in der windowsinternen Fensterliste.

FindWindwoEx (mit hwndChildAfter<>0) findet das Fenster, welches in dieser Windows-Liste dahinter aufgeführt ist.

Ich weiß jetzt nicht, ob das eine zufällige Reihenfolge ist, oder ob das die Erstellungsreihenfolge ist, oder ob es z.B. nach der Z-Achsen-Reihenfolge sortiert ist.

Dieser Parameter ist also "nur" eine Art Index

Die Fenster "wnd" und "awnd" haben aber keinerlei Beziehung zueinander. (gehören also z.B. nicht unbedingt zur selben Anwendung oder sonstwas)



Das Handle "wnd" 0 hast du abgefangen?
Das erste Fenster kann also nie ausgelesen werden.

Und wenn man das Handle des letzen Fensters, dieser Liste, angibt, dann dann gibt FindWindowEx 0 zurück und wovon soll dann GetWindowText dann den Text holen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Mär 2012 um 12:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#26

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 11. Mär 2012, 12:31
Das Handle "wnd" 0 hast du abgefangen?
Ja, ist im Code von mir auch zu sehen:
Delphi-Quellcode:
 //prüfen ob ein Fenster-Handle übergeben wurde
   If Wnd = 0 then
     exit;
Oder meinst du AWnd?


Und wenn man das Handle des letzen Fensters, dieser Liste, angibt, dann dann gibt FindWindowEx 0 zurück und wovon soll dann GetWindowText dann den Text holen?
Erwartest du jetzt von mir eine Antwort?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#27

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 11. Mär 2012, 13:16
Jupp.

function FensterText(Wnd: HWND): String;
Wo kommt denn Wnd her und was ist darin?

Delphi-Quellcode:
  //prüfen ob ein Fenster-Handle übergeben wurde
  If Wnd = 0 then
    exit;

  //Handle der Application zu dem Fenster auslesen
  AWnd := FindWindowEx(0, Wnd, 'TApplication', nil);
Da Wnd nie 0 ist, kann FindWindowEx niemals das erste TApplication zurückgeben.

Und
Delphi-Quellcode:
  //Handle der Application zu dem Fenster auslesen
  AWnd := FindWindowEx(0, Wnd, 'TApplication', nil);

  if AWnd = 0 then
    {es wurde nicht gefunden}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#28

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 11. Mär 2012, 13:24
Jupp.

function FensterText(Wnd: HWND): String;
Wo kommt denn Wnd her und was ist darin?
hier raus:
Delphi-Quellcode:
function PHandle_to_WHandle(const PHandle: Cardinal): HWND;

  function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
   begin
     TList(lParam).Add(Pointer(hWnd));
     Result := True;
   end;

var
   i : Integer;
   List : TList;
   ProcessId : DWORD;

begin
  //Rückgabewert vordefinieren
  Result := 0;

  If PHandle <= 0 then
    exit;

  //Liste erzeugen
  List := TList.Create;

  try
    If EnumWindows(@EnumWindowsProc, Integer(List)) then
      for i := 0 to Pred(List.Count) do
        begin
          If GetWindowThreadProcessId(Integer(List.Items[i]), ProcessId) > 0 then
            //Wenn die Prozess-ID gefunden wurde, dann das Handle aus der
            //Liste zurückgeben und die Schleife verlassen
            If GetProcessId(PHandle) = ProcessId then
              begin
                Result := Integer(List.Items[i]);

                break;
              end;
        end;
  finally
    //Liste löschen und freigeben
    FreeAndNil(List);
  end;
end;
Delphi-Quellcode:
  //prüfen ob ein Fenster-Handle übergeben wurde
  If Wnd = 0 then
    exit;

  //Handle der Application zu dem Fenster auslesen
  AWnd := FindWindowEx(0, Wnd, 'TApplication', nil);
Da Wnd nie 0 ist, kann FindWindowEx niemals das erste TApplication zurückgeben.
Ist das jetzt gut oder schlecht?
Muss ich also null möglich machen oder nicht
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#29

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 18. Mär 2012, 13:23
Hallo,

ich möchte dieses Thema nochmal aufwärmen.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#30

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 18. Mär 2012, 14:10
ich möchte dieses Thema nochmal aufwärmen.
Womit?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:13 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