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