Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
Delphi 12 Athens
|
AW: Fenstername und Dateiname aus Handle herausfinden
8. Mär 2012, 21:03
Delphi-Quellcode:
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;
Nur bei MainFormOnTaskBar=True hast du ein Problem.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
Geändert von himitsu ( 9. Mär 2012 um 18:39 Uhr)
|
|
Zitat
|