Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Alle Fenster in der Taskleiste finden (https://www.delphipraxis.net/84083-alle-fenster-der-taskleiste-finden.html)

Gabro 11. Jan 2007 03:25


Alle Fenster in der Taskleiste finden
 
Zu aller erst musss ich sagen ich programmiere in C#, Java und Visual Basic. Ich habe mich hier angemeldet weil hier viele kluge Leute sind und ich Delphi während der Schulzeit gelernt habe.

Mein Problem ist folgendes. Ich will alle Fenster die in der Taskleiste sichtbar sind ausfindig machen.

Bisher habe ich unter der Benutzung von EnumWindows alle Fenster aufgelistet und dann mit IsWindowVisible überprüft ob sie sichtbar sind. Als nächstes überprüfe ich ob der Klientbereich größer null ist. Sofort danach überprüfe ich ob das Flag WS_EX_APPWINDOW gesetzt ist, falls ja wird das Fenster übernommen. Alle Fenster bei denen das Flag WS_EX_TOOLWINDOW gesetzt ist werden aussortiert.

Leider werden immer noch Fenster gefunden die nicht in der Taskleiste sichtbar sind. Zum Teil ist das die Taskleiste selber die ich übrigens manuell aussortiere. Auch das Program Manager Fenster welches scheinbar vom Explorer.exe geöffnet wird, sortiere ich aus.

Es gibt aber leider, so komisch das auch klingt, noch Fenster die zwar sichtbar sind aber nicht in der Taskleiste angezeigt werden und ich weis nicht mit welchen Trick diese Fenster sich vor der Taskleiste verstecken.

Weis jemand wie ich nun diese Fenster, die sichtbar sind aber nicht in der Taskleiste angezeigt werden, ausfindig mache. Dazu gehört z.B. auch Miranda wenn es entsprechend konfiguriert ist.

chaosben 11. Jan 2007 06:06

Re: Alle Fenster in der Taskleiste finden
 
Hi Gabro ... Herzlich Willkommen in der DP! :hi:

Ich kann dir jetzt leider keine kompetente Antwort geben. Aber ich hab ein nettes kostenloses Tool für dich, was das Hantieren mit Fenstern leichter macht (und das Verständnis fördert :))

Gabro 11. Jan 2007 16:45

Re: Alle Fenster in der Taskleiste finden
 
Zitat:

Zitat von chaosben
Hi Gabro ... Herzlich Willkommen in der DP! :hi:

Ich kann dir jetzt leider keine kompetente Antwort geben. Aber ich hab ein nettes kostenloses Tool für dich, was das Hantieren mit Fenstern leichter macht (und das Verständnis fördert :))

Ich werde mir das Tool auf jeden Fall mal ansehen.

Gabro 14. Jan 2007 15:53

Re: Alle Fenster in der Taskleiste finden
 
Weis niemand wie man dieses Problem lösen könnte?

@ chaosben

Dein vorgeschlagenes Programm ist sehr gut. Danke damit werde ich im schlimmsten Fall eine Lösung finden.

SirThornberry 14. Jan 2007 15:56

Re: Alle Fenster in der Taskleiste finden
 
Ich hab es bisher über FindWindows(nil, nil) und GetWindow gemacht und das listet eigentlich nur die Fenster der Taskleiste auf.

Gabro 14. Jan 2007 16:06

Re: Alle Fenster in der Taskleiste finden
 
@SirThornberry

Das ist ja sehr interessant. Ich habe gerade nachgesehen. Das scheint keine WinApi zu sein. Es gibt nur FindWindow(). Scheinbar hat Delphi eine extra Methode dafür. Schade das ich sie nicht benutzen kann, das würde das Problem lösen.

SirThornberry 14. Jan 2007 16:11

Re: Alle Fenster in der Taskleiste finden
 
GetWindow ist eine aus der Unit Windows
Delphi-Quellcode:
var
  lHwnd : Cardinal;
  lClassname: Array[0..255] of Char;
begin
  lHwnd := FindWindow(nil, nil);
  while (lHwnd <> 0) do
  begin
    if IsWindowVisible(lHwnd) and (GetWindow(lHwnd, GW_OWNER) = 0) then
    begin
      GetWindowText(lHwnd, @lClassName, 255);
      ListBox1.Items.Add(lClassName);
    end;
    lHwnd := GetWindow(lHwnd, GW_HWNDNEXT);
  end;
end;
die Taskleiste muss hier noch gefiltert werden und Popupfenster müssen auch noch raus gefiltert werden. Dann klappts aber.

Christian Seehase 14. Jan 2007 16:52

Re: Alle Fenster in der Taskleiste finden
 
Moin Zusammen,

man könnte auch Hier im Forum suchenEnumWindows nehmen, da hiermit alle Top-Level-Windows herausgefiltert werden.

Gabro 14. Jan 2007 18:45

Re: Alle Fenster in der Taskleiste finden
 
Zitat:

Zitat von SirThornberry
GetWindow ist eine aus der Unit Windows
Delphi-Quellcode:
var
  lHwnd : Cardinal;
  lClassname: Array[0..255] of Char;
begin
  lHwnd := FindWindow(nil, nil);
  while (lHwnd <> 0) do
  begin
    if IsWindowVisible(lHwnd) and (GetWindow(lHwnd, GW_OWNER) = 0) then
    begin
      GetWindowText(lHwnd, @lClassName, 255);
      ListBox1.Items.Add(lClassName);
    end;
    lHwnd := GetWindow(lHwnd, GW_HWNDNEXT);
  end;
end;
die Taskleiste muss hier noch gefiltert werden und Popupfenster müssen auch noch raus gefiltert werden. Dann klappts aber.

Das ist ein ganz neuer Ansatz der wahrscheinlich besser funktioniert als EnumWindows(). Werde ich auf jeden Fall mal ausprobieren. Danke.

SirThornberry 14. Jan 2007 19:15

Re: Alle Fenster in der Taskleiste finden
 
Du kannst auch weiterhin EnumWindows nehmen. Ich denke der Knackpunkt ist die Überprüfung des Owners.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.
Seite 1 von 2  1 2      

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