AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Auflisten aller Programme, die als TrayIcon vorliegen
Thema durchsuchen
Ansicht
Themen-Optionen

Auflisten aller Programme, die als TrayIcon vorliegen

Ein Thema von ULIK · begonnen am 16. Aug 2017 · letzter Beitrag vom 17. Aug 2017
Antwort Antwort
Benutzerbild von ULIK
ULIK
Online

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#1

Auflisten aller Programme, die als TrayIcon vorliegen

  Alt 16. Aug 2017, 14:25
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 https://www.experts-exchange.com/que...ray-icons.html herumexperimentiert, aber dieser liefert mir keine Daten, obwohl Programme im Tray minimiert existieren.

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
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Auflisten aller Programme, die als TrayIcon vorliegen

  Alt 16. Aug 2017, 14:30
Ist es denn für dein Anwendung per se sinnvoll, dass sie zweimal gestartet werden kann?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.051 Beiträge
 
Delphi 12 Athens
 
#3

AW: Auflisten aller Programme, die als TrayIcon vorliegen

  Alt 16. Aug 2017, 14:57
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Auflisten aller Programme, die als TrayIcon vorliegen

  Alt 16. Aug 2017, 15:04
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).
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK
Online

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Auflisten aller Programme, die als TrayIcon vorliegen

  Alt 16. Aug 2017, 15:14
@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:
  result := FindWindow('NotifyIconOverflowWindow', nil);
  if (result <> 0) then
  begin
    result := FindWindowEx(result, 0, 'ToolbarWindow32', nil);
  end;
diesen Bereich erfassen. Allerdings liefert mir dann das Auslesen der TrayData-Struktur der dortigen Buttons keine Daten.


Danke,
Uli
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#6

AW: Auflisten aller Programme, die als TrayIcon vorliegen

  Alt 16. Aug 2017, 18:15
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#7

AW: Auflisten aller Programme, die als TrayIcon vorliegen

  Alt 16. Aug 2017, 21:24
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).
Das ist doch die Lösung, da musst Du mit Findwindow etc. nicht weiter probieren.
Grüße, Christoph
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK
Online

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Auflisten aller Programme, die als TrayIcon vorliegen

  Alt 17. Aug 2017, 05:41
Das ist doch die Lösung, da musst Du mit Findwindow etc. nicht weiter probieren.
Grüße, Christoph
Da hast du Recht. Ich hab nur zwischenzeitlich mit dem anderen Code rumgespielt, weil ich wissen wollte, warum der so nicht funktioniert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:29 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