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 Tasks im Systray (https://www.delphipraxis.net/40433-tasks-im-systray.html)

MatthiasW 15. Feb 2005 21:13


Tasks im Systray
 
ich möchte die Tasks im Systray ermitteln (Symbole neben der Uhr). Ich hatte mir gedacht, das ich vielleicht abfragen könnte welche Anwendung zum Symbol verkleiner ist. Aber wie?

Gibts ne Funktion um den Status eines Fensters (also Minimiert, Maximiert oder Symbol) abzufragen?

Luckie 15. Feb 2005 21:14

Re: Tasks im Systray
 
Machi oder wie der heißt, hat da eine Unit. Wurde auch schon im Forum erwähnt, wie man die Icons neben der Uhr ermitteln kann.

toms 15. Feb 2005 21:23

Re: Tasks im Systray
 
Ich habehier mal eine unit gepostet.

MatthiasW 15. Feb 2005 23:03

Re: Tasks im Systray
 
Danke für den Tipp, allerdings kann ich diesen Code nicht verwenden, da dieser nur funzt wenn der Explorer läuft. Ich brauche was das ohne laufende Windows - default - Shell lauffähig ist.

Mfg Matthias

Luckie 15. Feb 2005 23:15

Re: Tasks im Systray
 
Warum denn das? Was hast du denn vor?

MatthiasW 15. Feb 2005 23:25

Re: Tasks im Systray
 
ich habe vor eine kleine Shell für Windows2000 zu programmieren. Da ich eine eigenständige Shell proggen will, soll auch kein Explorer im Hintergrund laufen. Es gibt zwar schon ne Menge davon, ich denke nur an Litestep oder Blackbox, aber die sind etwas anders als ich es haben will.

toms 16. Feb 2005 05:20

Re: Tasks im Systray
 
Wenn der Explorer nicht laeuft dann auch TrayNotifyWnd nicht.

Luckie 16. Feb 2005 05:45

Re: Tasks im Systray
 
Zitat:

Zitat von toms
Wenn der Explorer nicht laeuft dann auch TrayNotifyWnd nicht.

:wall: Logisch. Ist ja ein Enkel oder Urenkel (Keine Ahnung wie viele Fenster noch dazwischen sind.) von der Tsklesite und somit vom Explorer.

Ergo, selber rausfinden wer alles
Delphi-Quellcode:
Shell_NotifyIcon(NIM_ADD, @IconData);
aufruft.

Viel Spass, da wirst du wohl noch einiges an Arbeit reinstecken müssen.

MatthiasW 16. Feb 2005 08:40

Re: Tasks im Systray
 
Hmmm, ok, ich werde sehen wie ich das dann anstellen kann, aber gibts da nicht wie beim Ausfiltern der Tasks in der Taskbar auch irgendwas z.B. process = sw_hide oder so?

Luckie 16. Feb 2005 09:16

Re: Tasks im Systray
 
Ich will ehrlich sein. So unbeholfen, wie du dich ausdrückst, erweckst du in mir den Eindruck, als wenn dir noch die nötigsten Grundlagen und Systemeinblicke bezüglich Windows Interna fehlen, um dein Projekt zu realisieren.

MatthiasW 16. Feb 2005 10:30

Re: Tasks im Systray
 
vielleicht habe ich mich etwas unglücklich ausgedrückt. Aber für jeden laufenden Task lassen sich ja "Eigenschaften" festlegen z.B. minimiert, maximiert, Symbol, Visible/Hide. Jetzt kann ich ja die Tasks nach diesen Eigenschaften filtern. Ich hatte gehofft das das auf die gleiche weiße mit den Tasks im Tray geht.

Luckie 16. Feb 2005 10:54

Re: Tasks im Systray
 
Fangen wir mal von vorne an:

Ein Prozess ist nur ein Container, der den Adressraum bereitstellt und organisiert. Ein Prozess führt keinen Code aus. Code ausführen tuen Threads. Threads sind Objekte innerhalb eines Prozesses und nutzen den vom ihm bereitgestellen Adressraum. Eine Windows GUI Anwendung hat immer mindestens einen Thread, den Hauptthreade, der direkt vom Prozess erzeugt wird. Dieser Hauptthread erzeugt das Fenster und kann, so es der Programmierer denn will, weitere Threads abspalten. Wird das zum Haupttheread gehörige Fenster geschlossen, wird auch der Hauptthread beendet. Ist es der einzige Thread im Prozess, wird selbiger vom System beendet, aus dem System entfernt, alle Ressourcen (geöffnete Dateien usw.) dieses Prozesse werden wieder freigegeben und der Adressraum wieder freigegeben; da ein Prozess ohne Thread und somit ohne auszuführenden Code, logischerweise seine Daseinsberechtigung verliert.

Zur TNA. Die TNA, der Bereich neben der Uhr, in der sich die Icons der Anwendungen befinden, ist eigentlich nichts anderes als eine Toolbar und die Icons sind nur Schaltflächen auf dieser Toolbar. Äußert nun eine Anwendung den Wunsch, dort ein Icon ablegen zu dürfen, erzeugt der Explorer eine neu Schaltfläche und ordnet sie der Anwendung zu. Wird jetzt auf das Symbol geklickt, wird die dazugehörige Anwendung benachrichtigt und diese kann dann darauf mit einer Aktion reagieren. "Minimiert" sich nun eine anwendung in die TNA, wird entweder nur das Fenster versteckt oder zerstört und eben bei Bedarf wieder erzeugt oder angezeit, je nach Lust und Laune des Programierers.

So, was willlst du nun wie Filtern?

MatthiasW 16. Feb 2005 16:22

Re: Tasks im Systray
 
ich sehe schon mit meinem Filtern komme ich nicht weiter. Tja kurz gesagt: ohne laufenden Explorer siehts da wohl schlecht :cry: aus. Da müsste ich dann wohl eine Application haben die als erstes gestartet wird und loggt wer ein

Delphi-Quellcode:
Shell_NotifyIcon(NIM_ADD, @IconData);
aufruft und das Handle des Prozesses dann abspeichern.

MatthiasW 17. Feb 2005 12:02

Re: Tasks im Systray
 
Ich habe mir nochmal die unit von toms angeschaut: da wird eine Funktion "GetIcon" aus der DLL "InterprocessImageList.DLL" verwendet um das Icon anhand der Bitmap ID zu ermitteln. Kann mir jemand sagen welche funktion in der DLL dahinter steckt um an das Icon zu gelangen?

toms 17. Feb 2005 13:25

Re: Tasks im Systray
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von MatthiasW
Ich habe mir nochmal die unit von toms angeschaut: da wird eine Funktion "GetIcon" aus der DLL "InterprocessImageList.DLL" verwendet um das Icon anhand der Bitmap ID zu ermitteln. Kann mir jemand sagen welche funktion in der DLL dahinter steckt um an das Icon zu gelangen?

InterprocessImageList.DLL ist in C++ geschrieben.
Die Sourcen findest du im Anhang.

Vielleicht hat ja jemand Lust, die Sourcen nach Delphi zu übersetzen :?: :roll: :?:

MatthiasW 17. Feb 2005 13:39

Re: Tasks im Systray
 
Danke für die Info's. Werds mir mal anschauen. Aber mit dem Umsetzen nach Delphi, mal sehen.

Mfg Matthias

toms 17. Feb 2005 13:44

Re: Tasks im Systray
 
Aber es ist doch gar nicht notwendig, wenn die dll in C++ geschrieben ist...
Kommt doch auf das gleiche heraus (hat vielleicht sogar einen Vorteil: die C++ Dll ist evtl. kleiner)

MatthiasW 17. Feb 2005 15:16

Re: Tasks im Systray
 
:wink: :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz