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 Shell_NotifyIcon und Windows 7 (Balloon Tips) (https://www.delphipraxis.net/138658-shell_notifyicon-und-windows-7-balloon-tips.html)

moelski 14. Aug 2009 10:29


Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Moin !

Ich benutze Shell_NotifyIcon um ein TrayIcon zu erstellen und um Balloons anzuzeigen.
Unter XP / Vista geht es problemlos. Unter Win7 kommt hingegen nur das TrayIcon.

Balloon Tips lassen sich aber nicht darstellen.

Ich bekomme beim Erstellen des TrayIcons auch folgende Meldung:
"An attempt was made to reference a token that does not exist"

Was mich auch etwas verwundert ...
Bei dem Windows 7 kriege ich als DLL Version von Shell32 6.0.1.
Laut dem hier:
http://msdn.microsoft.com/en-us/library/bb773352(VS.85).aspx
sollte da aber 6.0.6 raus kommen :gruebel:

Zitat:

Shell32.dll Version cbSize
6.0.6 or higher (Windows Vista and later) sizeof(NOTIFYICONDATA)
6.0 (Windows XP) NOTIFYICONDATA_V3_SIZE
Hat jemand einen Tip was man beachten muss, um auch unter Win7 die normalen Balloon Tips nutzen zu können mittels Shell_NotifyIcon?

Novo 18. Aug 2009 09:13

Re: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Entweder du benutzt die Windows 7 Controls For Delphi von www.gumpi.com/Blog
oder du benutzt die CoolTrayIcon Komponente.

funktioniert problemlos :)

holliesoft 18. Aug 2009 09:17

Re: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Hallo,

auch die Trayicon-Komponente aus der Jedi VCL funktioniert problemlos unter Windows 7 mit Ballon Tips :-)

Gruß
Patrick

molotov13 4. Mai 2010 10:31

Re: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Delphi-Forum.de Beitrag

Hallo Leute!

Ich habe folgendes Problem im Zusammenhang mit dem CoolTrayIcon und Windows 7:

Meine Applikation wird als Service gestartet und setzt ein TrayIcon in die Taskleiste. Unter Windows XP funktioniert dies einwandfrei.

Unter Windows 7 habe ich jedoch folgendes Problem: Das Icon wird nicht angezeigt, obwohl der Dienst ordnungsgemäß läuft. Ich habe dann herausgefunden, dass Icons standardmäßig versteckt werden und dieses in den Eigenschaften mittels "Show icon and notification" versucht zu aktivieren. Danach erhalte ich jedoch die Meldung
"Das Benachrichtigungssymbol ist derzeit nicht aktiv" und das Icon wird weiterhin nicht angezeigt. Kann mir jemand weiterhelfen. Wenn man googelt findet man nicht wirklich Hinweise, was das Problem sein könnte.

Nach diversen Stöbereien im Internet hab ich noch folgendes ausprobiert:
-Starten des Dienstes UI0Detect (Erkennung interaktiver Dienste): hat leider auch nichts gebracht.
-Auch das Aktivieren (was Standarmäßig sowieso der Fall ist) von "allow service to interact with desktop" im Service ändert nichts.

Bin schon relativ verzweifelt, was ich hier noch machen könnte. Die Antwort auf meinen Beitrag auf Delphi-forum.de:

Zitat:

Lösung: Der Dienst erledigt die Aufgabe(n), um Userinteraktion zu haben, eine Anwendung im Userkontext starten, die per IPC mit dem Dienst spricht und ggfs. Ausgaben macht (z.B. praktisch jede Firewall macht das auch so).
Damit kann ich leider nicht so gut leben, da ich (wenn möglich) meine Anwendung relativ unverändert lassen will.

Sherlock 4. Mai 2010 10:44

Re: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Damit wirst Du im Prinzip leben müssen. So wie ich das im Kopf habe, dürfen Dienste sowieso keine direkte Userinteraktion haben.

Sherlock

himitsu 4. Mai 2010 10:50

Re: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Der Service läuft dort auf einem anderem "Desktop" und er hat keinen Zugriff auf den sichtbaren Desktop.

Fazit: ein Service kann nicht selber mit dem User kommunizieren.

Rate mal, warum fast alle große Firmen für diesen Zweck eine zusätzliche GUI-Anwendung haben, welche via IPC mit dem Service reden kann und der für dir Kommunikation mit dem User sorgt?

peenuzz 23. Feb 2012 08:31

AW: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Heyho,

ich benutze XE2 (eine FM-HD Anwendung) mit win7 64bit.
Ich kann mit Shell_NotifyIcon ein Item ins System Tray einfügen.
Leider verabschieded sich mein Tray Icon jedesmal, wenn ich den Mauszeiger über das System Tray bewege.
Ich bitte um Denkanstöße :)

Hier mein Code:

Code:
procedure TRandomForm.SendToTray;
var
IconData : TNOTIFYICONDATA;
ExeName : PWideChar;
begin
   IconData.cbSize := sizeof(TNOTIFYICONDATA);
   IconData.Wnd := RandomForm.handle;
   IconData.uID := 1;
   IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
   IconData.uCallbackMessage := WM_TASKBAREVENT; // $1E2D = Doppelklick linke Maustaste
   ExeName := PWideChar(Paramstr(0));
   IconData.hIcon := ExtractIcon(application.GetHashCode,ExeName, 0) ;
   strcopy(IconData.szTip,'uktfzg');
   Shell_NotifyIcon(NIM_ADD, @IconData);
end;
Und ja: ich bin ein Totengräber :twisted:
Danke euch.

peenuzz 24. Feb 2012 14:48

AW: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
/bump

himitsu 24. Feb 2012 15:29

AW: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Wenn die anwendung nicht auf das Maus-Ereignis reagiert (sei die Anwendung verreckt/abgestürtzt oder weil garnicht oder falsch auf die Message reagiert wird), entfernt Windows diese Icons.


Sicher daß alle Parameter richtig sind und auch auf das Event ordnungsgemäß reagiert wird? Und was sagt der Debugger zu Letzerem?
http://msdn.microsoft.com/en-us/libr.../bb773352.aspx

peenuzz 27. Feb 2012 09:38

AW: Shell_NotifyIcon und Windows 7 (Balloon Tips)
 
Hallo himitsu,

danke für die Antwort. Nein, die Anwendung stürzt nicht ab.

Hier mein Mouse-Event:
Code:
procedure WMTaskbarEvent(var message: TMessage); message WM_TASKBAREVENT;
Der Debugger kommt aber garnicht erst zum Auslesen der Message.
Es wird wohl an den Parametern liegen.
Mir ist aufgefallen, dass mein RandomForm.Handle einen Index herausgibt, jedoch der Taskmanager garnicht hinterher kommt und mir immer weniger Handles anzeigt. Könnte es hier zu einem Adressierungs-Konflikt kommen?

Edit: Habe meinen Code spaßeshalber in einem neuem standard VCL-Formular ausprobiert. Dort läuft alles wunderbar. Scheint am FMX zu liegen.


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