AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Auf Kriegsfuß mit EnumWindowsProc
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Kriegsfuß mit EnumWindowsProc

Ein Thema von phlux · begonnen am 2. Nov 2003 · letzter Beitrag vom 2. Nov 2003
Antwort Antwort
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
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Auf Kriegsfuß mit EnumWindowsProc

  Alt 2. Nov 2003, 17:09
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz