Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Auf Kriegsfuß mit EnumWindowsProc (https://www.delphipraxis.net/11235-auf-kriegsfuss-mit-enumwindowsproc.html)

phlux 2. Nov 2003 15:56


Auf Kriegsfuß mit EnumWindowsProc
 
Servus :hi:
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
Delphi-Quellcode:
    (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 :hi:

Christian Seehase 2. Nov 2003 16:09

Re: Auf Kriegsfuß mit EnumWindowsProc
 
Moin Phlux,

Du könntest ja einfach noch überprüfen, welches Fenster Du gefunden hast.
Ist es das, was Du anzeigen willst, nimmst Du es ansonsten wird es einfach übergangen.
Ob's das richtige ist, kannst Du ja vielleicht mit Hier im Forum suchenGetClassName und/oder der Caption herausbekommen.
Eventuell hilft Dir auch Hier im Forum suchenEnumChildWindows weiter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz