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 Active und Inactive Fenster auflisten? (https://www.delphipraxis.net/835-active-und-inactive-fenster-auflisten.html)

thomasdrewermann 13. Sep 2002 22:44


Active und Inactive Fesnter Auflisten?
 
Hi Leute,
weiss jemand, wie ich das gerade avtie Fenster ermitteln kann?
Gibts da vielleicht 'n Event?
Wie bekomme ich die Liste der inaktiven Anwendungen heraus, also die, die normalerweise in der taskleiste rechts neben dem Start-button stehen?

Die Aktiviere ich eine Anwendung?

MFG
Thomas

Luckie 14. Sep 2002 01:14

Mit EnumWindows kannst du alle Fenster auflisten. Und mit IsWindowVisible kannst du alle sichtbaren rausfiltern.

Code:
[b]type[/b]
PMyEnumParam = ^TMyEnumParam;
TMyEnumParam = [b]record[/b]
  lv: TListview;
[b]end[/b];

[b]function[/b] GetWindows([b]const[/b] hWnd : Longword;
                          Param: PMyEnumParam): LongBool; [b]stdcall[/b];
[b]var[/b]
  Len : Longint;
  S  : [b]String[/b];
  li: TListItem;
[b]begin[/b]
  Result := True;
  [b]if[/b] [b]not[/b] ( IsWindow(hWnd) [b]and[/b] IsWindowVisible(hWnd) ) [b]then[/b] Exit;
  Len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0);
  [b]if[/b] Len > 0 [b]then[/b]
  [b]begin[/b]
    SetLength(S, Len);
    SendMessage(hWnd, WM_GETTEXT, Len + 1, Longint(Pchar(S)));
    li := Param.lv.Items.Add;
    li.Caption := s;
    li.SubItems.Add(IntToStr(hWnd));
  [b]end[/b];
  [i]// mit Result = False kann die Callbackfunktion vorzeitig verlassen werden[/i]
[b]end[/b];

[b]procedure[/b] TForm1.Button1Click(Sender: TObject);
[b]var[/b]
  Param: TMyEnumParam;
[b]begin[/b]
  Param.lv := Listview1;
  EnumWindows(@GetWindows, LPARAM(@Param));
[b]end[/b];

thomasdrewermann 14. Sep 2002 08:25

Hi,
erstmal Vielen Dank an Luckie, für den Code.

Der code zeigt mir aber alle fenster an, ich wollt ja nur die auf der Task-Leiste haben. Ich bin nämlich dabei eine eigene Shell zu proggen, und da muss ich ja wissen welche Fenster da sind. Das tükische ist nur, dass Delphi zum Besipiel 3 Fenster hat, die ja nicht alle auf der Task-Leiste angezeigt werden. Kann man die noch irgendwie filtern?

MFG
Thomas

Luckie 14. Sep 2002 08:29

Taskleiste oder DNU-Leiste :?:

(DNU = Ding neben der Uhr) :mrgreen:

thomasdrewermann 14. Sep 2002 08:47

Liste der Anhänge anzeigen (Anzahl: 1)
Diese Leiste Meine ich:
http://www.delphipraxis.net/attached...1031989623.jpg

Luckie 14. Sep 2002 08:50

Hm, das wird schwer, wenn nicht sogar unmöglich.

Was willst du denn machen? Eventuell gibt es einen anderen gangebaren Weg.

thomasdrewermann 14. Sep 2002 09:00

Ich möchte gerne eine eigene Shell Programmieren, also eine eigene Explorer.exe. Mit einer Task-Leiste....

Und für die Taskleiste muss ich ja die einträge wissen ;-)

MFG
Thomas

Luckie 14. Sep 2002 09:03

Ach du meine Güte. :shock: Hast du schlecht geschlafen oder was?

Hm, aber sorry, da kann ich dir nicht weiterhelfen. Ich hätte noch nicht mal eine Ansatz für so etwas.

MathiasSimmack 14. Sep 2002 09:05

Na, Luckie? Du müsstest es doch eigentlich wissen, immerhin hat doch Microsoft bei dir abgeschrieben? :wink:

PSDK: Indexeintrag "Taskbar Buttons, Managing" ... und lesen, Thomas!

Luckie 14. Sep 2002 09:14

Ups. Hm, ist wohl nocht etwas früh. :?

Aber mir waren die Stichworte nicht geläufig.

thomasdrewermann 14. Sep 2002 09:19

Darin steht nur, wie man ein button anlegen kann, nicht aber, wie man vorhandene Buttons ausliest.

MFg
Thomas

Luckie 14. Sep 2002 09:21

Muß auch andersrum gehen sonst macht das ja keinen Sinn.

Das wäre wohl der Einstieg:
http://msdn.microsoft.com/library/de...ng/taskbar.asp
Einfach mal etwas rumwühlen.

thomasdrewermann 14. Sep 2002 09:52

Mathias kannst du mir mal den Link schicken, den du meintest, ich find den indexeintrag net?

MFG
thomas

OregonGhost 14. Sep 2002 10:16

Ähm... Wenn du deinen Explorer-Ersatz schreibst, heißt das, es gibt gar keine Taskleiste, die du auslesen kannst...

Aber in eurem tollen Artikel steht's doch drin:
Zitat:

Zitat von Microsoft
The Shell creates a button on the taskbar whenever an application creates a window that isn't owned. To ensure that the window button is placed on the taskbar, create an unowned window with the WS_EX_APPWINDOW extended style.

Also ist jedes Fenster für das (GetParent() = 0) gilt, ein Fenster, das in der Taskleiste angezeigt wird, oder?

MathiasSimmack 14. Sep 2002 11:27

Hi OregonGhost.

Hat ja keiner gesagt, dass es einfach werden würde. Die Alternative wäre dann wohl ein Shell-Hook (WH_SHELL), mit dem du prüfst ob ein Fenster erzeugt (HSHELL_WINDOWCREATED) oder entfernt (HSHELL_WINDOWDESTROYED) wird.

Es gibt ja inzwischen ein paar freie Shell-Ersatze (Ersätze? :wink:) für den Win-Desktop. In der aktuellen Ausgabe 10 der PC WELT wurden einige vorgestellt. Vielleicht gibt´s zu einem dazu ja auch den Source, so dass Thomas zumindest mal schauen könnte, wie die das gemacht haben.

@Thomas: Link? Keine Ahnung, ich nutze das PSDK offline, da wäre der Link der hier:
Code:
mk:@MSITStore:<Dein PSDK-Ordner>\help\shellcc.chm::/platform/shell/programmersguide/shell_int/shell_int_programming/taskbar.htm

thomasdrewermann 14. Sep 2002 13:42

Hi,
kannst du mir sagen, wo ich es downloaden kann?

thomasdrewermann 14. Sep 2002 18:06

Ich hab mir die shells bei pc-welt mal angeschaut, und festgestellt, dass die tatsächlich mit Source-Code erhältlich sind.
Leider sind sämtliche Shells in C++ oder C geschriben. Da ich null ahnung von beidem Habe helfen mir diese Shells auch net weiter :-(

Hier die Liste der Shells:
http://www.pcwelt.de/ratgeber/extras/25767/2.html
Vielleicht hat ja der ein oder andere ahnung von C oder C++, und kann mir dann sagen wie ich es in Delphi machen muss???

MFG
Thomas

Chewie 14. Sep 2002 19:12

Was du machen könntest, wäre nach den Funktionen, die du laut SDK mit den Taskbarbuttons zu tun haben, in dem Source zu suchen und zu schauen, wie die Funktionen da verwendet wurden. Dafür brauchst du kaum C/C++-Kenntnisse.

RomanK 14. Sep 2002 20:18

Also Hier:
http://www.microsoft.com/msdownload/...sdk/sdkupdate/
und dann Downloads->Full Downloaded. Dann wird alles heruntergeladen und du kannst, nach dem downloaden, aussuchen was du installieren willst.
Wenn du nicht alles runterladen willst kannst du unter
Downloads->Install auswählen was du haben willst dann wird auch nur das installiert und reuntergeladen. Wenn du z.B. Direct X.X Programmierung nicht haben willst!!!
Allerdings bei einer Neuistallation hast du, vorrausgesetzt du hast nicht den PSDK-Ordner gesichert, keine Installation mehr und du musst es nochmal machen!

thomasdrewermann 14. Sep 2002 23:29

Weiss Jemand denn, wie ich fenster einzelnen prozessen zuordnen kann?

Luckie 15. Sep 2002 02:53

Mit GetWindowThreadProcessID.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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