Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: Fenstername und Dateiname aus Handle herausfinden

  Alt 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.
$2B or not $2B

Geändert von himitsu ( 9. Mär 2012 um 18:39 Uhr)
  Mit Zitat antworten Zitat