Einzelnen Beitrag anzeigen

Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#1

Auf Kriegsfuß mit EnumWindowsProc

  Alt 2. Nov 2003, 16:56
Servus
Also ich habe hier als Vorlage aus dem SwissDelphiCenter folgenden Code der mir alle Fenster anzeigen soll (mit Titel):

Delphi-Quellcode:
function GetText(Wnd: HWND): string;
var
  textlength: Integer;
  Text: PChar;
begin
  textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
  if textlength = 0 then Result := '
  else
  begin
    GetMem(Text, textlength + 1);
    SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text));
    Result := Text;
    FreeMem(Text);
  end;
end;

function EnumWindowsProc(Wnd: HWND; lParam: lParam): BOOL; stdcall;
begin
  Result := True;
  if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
    ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
    (GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
    (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then
    Form1.Listbox1.Items.Add('Handle: ' + IntToStr(Wnd) + ',Text: ' + GetText(Wnd));
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  Param: Longint;
begin
  EnumWindows(@EnumWindowsProc, Param);
end;
Wenn ich jetzt allerdings das Beispiel so ausführe werden Fenster wie das ICQ Fenster nicht angezeigt. Das liegt daran, dass ICQ ja den Style eines ToolWindows hat (kein Icon, kleine Titelleiste, usw.) hab auch mal in der MSDN geguckt und bin zu dem Schluss gekommen, dass die Zeile
    (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then dafür sorgt, dass ICQ nicht angezeigt wird. Kommentiere ich diese Bedingung aus und starte jetzt das Programm, werden noch weitere Fenster angezeigt, die ein User lieber nicht sehen/bzw. schließen sollte
Hab hier auch schon in der DP gesucht, allerdings keine Lösung dazu gefunden. Weiß jemand Rat wie ich Fenster wie ICQ angezeigt bekomme und "wichtige" Fenster trotzdem nicht angezeigt werden?

mfg phluphie
Christian "phlux" Arndt
  Mit Zitat antworten Zitat