Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 8. Mär 2012, 20: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 17:39 Uhr)
  Mit Zitat antworten Zitat