![]() |
Fenstername und Dateiname aus Handle herausfinden
Hallo,
ist es möglich über einen Prozess-Handle an den Fensternamen und vielleicht auch noch an den Dateinamen zu gelangen? Ich finde hier nur den anderen weg, also Name bekannt, Handle unbekannt |
AW: Fenstername und Dateiname aus Handle herausfinden
|
AW: Fenstername und Dateiname aus Handle herausfinden
Zitat:
Ich habe beide Funktionen ausprobiert - nur bei beiden erhalte ich keinen String zurück. |
AW: Fenstername und Dateiname aus Handle herausfinden
Auf jeden Fall ist es möglich. Das weiß ich, weil ich es mal vor Jahren in einem meiner Programme angewendet habe. Nur frag nicht wo. Vielleicht fällt es mir ein.
|
AW: Fenstername und Dateiname aus Handle herausfinden
|
AW: Fenstername und Dateiname aus Handle herausfinden
Hallo,
die Frage passt hier noch dazu: Wie kann ich aus einem Prozess-Handle "Application.Title" rausfinden? |
AW: Fenstername und Dateiname aus Handle herausfinden
Du suchst ein Nichtsichtbares Fenster, mit dem Klassennamen TApplication (ich glaub Delphi mäppt das in den Klassennamen der Windows-Klasse für
![]() Der Text davon ist der Titel. ( ![]() |
AW: Fenstername und Dateiname aus Handle herausfinden
Zitat:
Mir fehlt momentan ein Anhaltspunkt |
AW: Fenstername und Dateiname aus Handle herausfinden
Delphi-Quellcode:
Nur bei MainFormOnTaskBar=True hast du ein Problem.
function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var M, C, T: string; X: array[0..MAX_PATH-1] of Char; begin FillChar(X, SizeOf(X), 0); GetWindowModuleFileName(hwnd, @X, Length(X)); M := X; FillChar(X, SizeOf(X), 0); GetClassName(hwnd, @X, Length(X)); C := X; SetLength(T, GetWindowTextLength(hwnd)); if T <> '' then GetWindowText(hwnd, PChar(T), Length(T) + 1); TMemo(lParam).Lines.Add(Format('%s %s %s', [ C, '"' + Copy(T, 1, 30) + IfThen(Length(T) > 30, '..."', '"'), M])); Result := True; end; procedure TForm9.FormCreate(Sender: TObject); var H: HWND; X: array[0..MAX_PATH-1] of Char; begin Application.MainFormOnTaskBar := False; Application.Title := 'hallo :)'; H := FindWindow('TApplication', nil); if H <> 0 then begin GetWindowText(H, @X, Length(X)); Memo1.Lines.Add('"' + string(X) + '"'); end else Memo1.Lines.Add('>> nix'); Memo1.Lines.Add(''); Memo1.Lines.Add('***'); H := 0; repeat H := FindWindowEx(0, H, 'TApplication', nil); if H <> 0 then begin GetWindowText(H, @X, Length(X)); Memo1.Lines.Add('"' + string(X) + '"'); end; until H = 0; Memo1.Lines.Add(''); Memo1.Lines.Add('***'); EnumWindows(@EnumWindowsProc, LPARAM(Memo1)); end; Aus irgendeinem mir unerfindlichen Grund wird dort dieser TApplication-Fenstertitel absichtlich auf einen Leerstring gesetzt und nur in einer internen Stringvariable gespeichert, welche öffentlich natürlich nicht zugänglich ist. |
AW: Fenstername und Dateiname aus Handle herausfinden
Hallo himitsu,
ich hab deinen Code ausprobiert - nur fliegt mir bei der ersten Abfrage von
Delphi-Quellcode:
die CPU um die Ohren, sprich ich bekomme eine Access Violation
T
[Edit] Ich hab jetzt mal etwas geforscht und bin auf diese Zeile gestoßen:
Delphi-Quellcode:
ich habs dann so abgeändert und ich seh was im Memo:
GetWindowText(hwnd, PChar(T), Length(T + 1);
Delphi-Quellcode:
GetWindowText(hwnd, PChar(T), Length(T);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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