AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Alle Fenster in der Taskleiste finden
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Fenster in der Taskleiste finden

Ein Thema von Gabro · begonnen am 11. Jan 2007 · letzter Beitrag vom 14. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Gabro

Registriert seit: 11. Jan 2007
10 Beiträge
 
#1

Alle Fenster in der Taskleiste finden

  Alt 11. Jan 2007, 04:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Alle Fenster in der Taskleiste finden

  Alt 11. Jan 2007, 07:06
Hi Gabro ... Herzlich Willkommen in der DP!

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 )
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Gabro

Registriert seit: 11. Jan 2007
10 Beiträge
 
#3

Re: Alle Fenster in der Taskleiste finden

  Alt 11. Jan 2007, 17:45
Zitat von chaosben:
Hi Gabro ... Herzlich Willkommen in der DP!

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.
  Mit Zitat antworten Zitat
Gabro

Registriert seit: 11. Jan 2007
10 Beiträge
 
#4

Re: Alle Fenster in der Taskleiste finden

  Alt 14. Jan 2007, 16:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Alle Fenster in der Taskleiste finden

  Alt 14. Jan 2007, 16:56
Ich hab es bisher über FindWindows(nil, nil) und GetWindow gemacht und das listet eigentlich nur die Fenster der Taskleiste auf.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gabro

Registriert seit: 11. Jan 2007
10 Beiträge
 
#6

Re: Alle Fenster in der Taskleiste finden

  Alt 14. Jan 2007, 17:06
@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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Alle Fenster in der Taskleiste finden

  Alt 14. Jan 2007, 17:11
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Alle Fenster in der Taskleiste finden

  Alt 14. Jan 2007, 17:52
Moin Zusammen,

man könnte auch Hier im Forum suchenEnumWindows nehmen, da hiermit alle Top-Level-Windows herausgefiltert werden.
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
Gabro

Registriert seit: 11. Jan 2007
10 Beiträge
 
#9

Re: Alle Fenster in der Taskleiste finden

  Alt 14. Jan 2007, 19:45
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Alle Fenster in der Taskleiste finden

  Alt 14. Jan 2007, 20:15
Du kannst auch weiterhin EnumWindows nehmen. Ich denke der Knackpunkt ist die Überprüfung des Owners.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:27 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