![]() |
Auflisten aller Programme, die als TrayIcon vorliegen
Servus,
könnte mir jemand sagen, wie man alle Programme auflistet, die als TrayIcon in der TNA vorliegen? Der Code müßte von XP bis Windows 10 funktionieren (unter 32Bit). Ich hab bisher mit dem Code aus ![]() Hintergrund: mein Programm soll sich (optional) beim Beenden minimieren und dann als TrayIcon weiterleben. Ist soweit kein Problem und funktioniert. Nun möchte ich aber verhindern, daß eine gestartete zweite Instanz des Programms sich ebenfalls ins Tray minimiert (da dies funktional keinen Sinn ergibt). Deswegen war meine Idee, zu schauen, ob schon eine Instanz als TrayIcon vorliegt und wenn ja, dann die zweite Instanz wirklich zu beenden, statt ins Tray zu minimieren. Danke, Uli |
AW: Auflisten aller Programme, die als TrayIcon vorliegen
Ist es denn für dein Anwendung per se sinnvoll, dass sie zweimal gestartet werden kann?
|
AW: Auflisten aller Programme, die als TrayIcon vorliegen
Stichwort: IPC
Das andere Programm hat es nicht zu interessieren, ob der andere im TNA ist, jedenfalls nicht aus Sicht der TNA. Die Programme unterhalten sich und sprechen sich ab, wer sich da anzeigt. Bzw. Semaphore ... wenn schon eine Instanzläuft, dann seigt man sich nicht im TNA an. Altenativ: im TNA zeigt sich ein drittes Programm an, was sich mit einem/mehreren der Instanzen des Hauptprogramms unterhält. Beispiel: Virenscanner, Firewall usw. im TNA liegt nur ein Kontrollprogramm und das Hauptprogramm läuft im Hintergrund und wird vom Kontrollprogramm gesteuert. |
AW: Auflisten aller Programme, die als TrayIcon vorliegen
Die einfachste Variante ist einen Mutex zu erzeugen (CreateMutex) sobald die Anwendung in die Tray minimiert wird. Wird von der zweiten Anwendung der Mutex gefunden (OpenMutex liefert Wert <> 0), was vor der Erzeugung geprüft werden muss, beendet sich diese Instanz stattdessen. Wird die Anwendung aus der Tray wiederhergestellt, wird der Mutex wieder freigegeben (CloseHandle).
|
AW: Auflisten aller Programme, die als TrayIcon vorliegen
@himitsu, @jaenicke: vielen Dank, manchmal sieht man den Wald vor lauter Bäumen nicht mehr.
@TiGü: ja, ist durchaus sinnvoll. Es handelt sich um einen Dokumenteneditor, der aber beim Start des Programms erst einmal sehr viele Daten einlesen und verarbeiten muß, ohne die die Berarbeitung wenig Sinn macht. Das ist eh schon verzögert was geht, aber irgendwann müssen die Daten halt doch mal geladen werden. Und da werden teilweise mehrere Instanzen parallel geöffnet. Nur zur Info: Ein Problem des Codes aus Experts-Exchange ist wohl, daß mein Icon dort gar nicht erfaßt wird: Die Bestimmung des Traybereichs liefert nur das Fenster-Handle des sichtbaren Infobereichs, nicht aber der TrayIcons, die im Popup daneben verborgen sind. Hier müßte man wohl noch zusätzlich mit
Delphi-Quellcode:
diesen Bereich erfassen. Allerdings liefert mir dann das Auslesen der TrayData-Struktur der dortigen Buttons keine Daten.
result := FindWindow('NotifyIconOverflowWindow', nil);
if (result <> 0) then begin result := FindWindowEx(result, 0, 'ToolbarWindow32', nil); end; Danke, Uli |
AW: Auflisten aller Programme, die als TrayIcon vorliegen
Kannst du nicht prüfen, ob das Programm schon läuft und wenn ja, dann nicht zulassen?
Auch sollte beim Start des ersten Programms ein Fortschrittsbalken kommen, damit man sieht, wo man steht. Das sind so meine Gedanken zu dem Thema. |
AW: Auflisten aller Programme, die als TrayIcon vorliegen
Zitat:
Grüße, Christoph |
AW: Auflisten aller Programme, die als TrayIcon vorliegen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 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