AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Toast Notification in Windows 10/11 mit Eventhandler
Thema durchsuchen
Ansicht
Themen-Optionen

Toast Notification in Windows 10/11 mit Eventhandler

Ein Thema von Yersinian · begonnen am 16. Okt 2023 · letzter Beitrag vom 20. Nov 2023
Antwort Antwort
Seite 1 von 2  1 2      
Yersinian

Registriert seit: 16. Okt 2023
8 Beiträge
 
#1

Toast Notification in Windows 10/11 mit Eventhandler

  Alt 16. Okt 2023, 11:06
Hi!

Ich nutze Delphi 10.2 und erarbeite gerade für eine recht komplexe Software in unserem Betrieb die Möglichkeit Notifications auszuschmeißen,
wenn neue Nachrichten im integrierten Chat vorhanden sind.

Bisher nutzte ich dafür folgendes:

Code:
procedure TWindowsBenachrichtigung.DoReceiveLocalNotification(Sender: TObject;
  ANotification: TNotification);
begin
    //Öffnet die Chatübersicht des Benutzers, der gerade angemeldet ist.
end;

constructor TWindowsBenachrichtigung.Create;
begin
     inherited;
     FNachricht := TNotification.Create;
     FNachrichtCenter := TNotificationCenter.Create(nil);
end;

procedure TWindowsBenachrichtigung.SendeBenachrichtigung(ASender: TObject; ABenachrichtigungstitel, AVorschauText: String);
begin
     try
        FNachricht.EnableSound := True;
        FNachricht.AlertBody := AVorschautext;
        FNachricht.Title := ABenachrichtigungstitel;
        FNachrichtCenter.OnReceiveLocalNotification := DoReceiveLocalNotification;
        FNachrichtCenter.PresentNotification(FNachricht);
     finally
     end;
end;
Dies hat aber ein großes Problem. Die erste Notification des Tages hat einen cryptischen Titel wie Embarcadero.Toasts.######### (siehe First Note.png)
und alle danach folgenden immer nur den Exe-Namen (Next Notes.png).

Sie soll aber gezielte Bezeichnungen enthalten. Das ist über XML machbar (Ziel.png). Das verstehe ich soweit. Ich habe auch da ein Projekt erstellt, das das ganze macht.
Ich habe ein Reg-Key erstellt und habe eine ErstelleToast-Methode.

Auf Click führt er dann über die Exe etwas aus.

Das Problem ist daran, dass er halt ne neue Exe öffnen will etc. über Reg-key-shell-open-command

Ich möchte aber gern ein simples Notify-Event haben wie bei der ursprünglichen Version.

Es soll so sein, dass ein Nutzer Mitteilungen erhält, solang er im Programm ist.
Sobald das Programm geschlossen wird wird das Action-Center von Windows eh leergeräumt.

Der Klick auf die Notification soll dann die Chatübersicht des Benutzers öffnen.


Mein Methode zum Erstellen sieht so aus
Code:
procedure ErstelleToast;
var
     ToastNotificationManagerStatics : IToastNotificationManagerStatics;
     ToastTemplate : Xml_Dom_IXmlDocument;
     LToastNotification : IToastNotification;
     ToastNotificationManagerFactory : IInspectable;
     ToastNotificationFactory : IInspectable;
     hAppID : HString;
begin
     InitialisiereWindowsRunTime;
     ToastNotificationManagerFactory := GetFactory(sToastNotificationManager, '{50AC103F-D235-4598-BBEF-98FE4D1A3AD4}');
     ToastNotificationManagerStatics := IToastNotificationManagerStatics(ToastNotificationManagerFactory);
     ToastTemplate := ToastNotificationManagerStatics.GetTemplateContent(ToastTemplateType.ToastText01);
     UeberschreibeToastTemplateXML(ToastTemplate, cNotificationXML);
     ToastNotificationFactory := GetFactory(SToastNotification, '{04124B20-82C6-4229-B109-FD9ED4662B53}');
     LToastNotification := IToastNotificationFactory(ToastNotificationFactory).CreateToastNotification(ToastTemplate);
     hAppID := StringToHString(cNotificationAppID);
     try
          ToastNotificationManagerStatics.CreateToastNotifier(hAppID).Show(LToastNotification);
     finally
          WindowsDeleteString(hAppID);
     end;
end;
Der XML-PArt sieht so aus
Code:
     cNotificationXML = '<toast activationType="protocol" launch="WinRTToast://NotificationClick?param1=value1">' +
                        ' <visual>' +
                        '   <binding template="ToastGeneric">' +
                        '     <text>Nachrichten</text>' +
                        '     <text>Neue Nachricht</text>' +
                        '     <image placement="appLogoOverride" src="file:\\\C:\Ordner\Unterordner\programm.ico" />' +
                        '   </binding>' +
                        ' </visual>' +
                        ' <actions>' +
                        ' <action content="Öffne Nachricht" activationType="protocol" arguments="WinRTToast://NotificationClick?param1=value1" />' +
                        ' </actions>' +
                        '</toast>';
Ich habe das Internet durchforstet, aber nichts gefunden, was mich so richtig auf den Weg geführt hat, den ich benötige.

Könnt ihr mir eine Anleitung/Tipps und Tricks mitgeben, wie ich mein Vorhaben verwirklichen kann?

Wenn ihr weitere Informationen braucht, dann sagt gern bescheid. Ich freue mich auf eure Rückmeldungen.

Danke!
Miniaturansicht angehängter Grafiken
first-note.png   next-notes.png   ziel.png  

Geändert von Yersinian (16. Okt 2023 um 11:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 16. Okt 2023, 13:59
Du musst einen COM Server bereitstellen, der die Kommunikation zwischen dem Notification Center und deinen Anwendungen übernimmt.
Einstieg z.b. https://learn.microsoft.com/de-de/wi...tions-overview
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
103 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 16. Okt 2023, 15:52
Bisher nutzte ich dafür folgendes:
[...]
Code:
procedure TWindowsBenachrichtigung.SendeBenachrichtigung(ASender: TObject; ABenachrichtigungstitel, AVorschauText: String);
begin
     try
        FNachricht.EnableSound := True;
        FNachricht.AlertBody := AVorschautext;
        FNachricht.Title := ABenachrichtigungstitel;
        FNachrichtCenter.OnReceiveLocalNotification := DoReceiveLocalNotification;
        FNachrichtCenter.PresentNotification(FNachricht);
     finally
     end;
end;
Dies hat aber ein großes Problem. Die erste Notification des Tages hat einen cryptischen Titel wie Embarcadero.Toasts.######### (siehe First Note.png)
und alle danach folgenden immer nur den Exe-Namen (Next Notes.png).

Sie soll aber gezielte Bezeichnungen enthalten. [...]
Der kryptische Titel taucht bei mir auch auf mit dem Beispielcode von Embarcadero:
Code:
C:\Users\Public\Documents\Embarcadero\Studio\22.0\Samples\Object Pascal\VCL\Windows 10 Notifications\NotificationsProject.dpr
Im Embarcadero Quality Center gibt es dazu einen Bug-Report: RSP-32375, also "Lösung" wird angeraten, rechtzeitig vor dem Erzeugen der ersten Notification eine Initialisierung durchzuführen, z.B. in FormCreate():
Code:
NotificationCenter1.PlatformInitialize;
Das ist auch im DocWiki beschrieben:
https://docwiki.embarcadero.com/Libr...formInitialize

HTH
Achim

Geändert von Achim Kalwa (16. Okt 2023 um 15:54 Uhr) Grund: RSP-Link korrigiert
  Mit Zitat antworten Zitat
Yersinian

Registriert seit: 16. Okt 2023
8 Beiträge
 
#4

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 17. Okt 2023, 10:50
Hey! Danke für die Antworten schon einmal.

"Das mit Das ist auch im DocWiki beschrieben:
https://docwiki.embarcadero.com/Libr...formInitialize "
klang sehr vielversprechend. Leider ist es aber erst ab 10.4 Sydney.
Im Betrieb nutzen wir 10.2 Tokyo,
was sich in absehbarer zeit auch nicht ändern wird.

In den COM-Server werde ich mich nochmal einlesen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 17. Okt 2023, 11:01
Wir hatten am Samstag erste Blick auf die 12 geworfen.
Ihr verpasst was.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Yersinian

Registriert seit: 16. Okt 2023
8 Beiträge
 
#6

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 17. Okt 2023, 12:45
Hey Himitsu =)

Ich hab gestern noch zu meinem Kollegen gesagt, wie lange es wohl dauert, bis auch du antwortest =)

Ja. Ich hoffe, dass wir auch updaten. Vielleicht spreche ich das mal an, aber aktuell ist das leider noch nicht meine Problemlösung.

Bin gespannt wie 12 wohl sein wird. Zu Hause habe ich die 11 =)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 17. Okt 2023, 14:41
Wir sind ja hauptsächlich noch mit XE unterwegs, aber 10.2 10.3 10.4 11 ist inzwischen nahezu fertig und grade in der Dokumentation/Entabnahme und hoffentlich demnächst auch Übernahme (erster von 3 PRs ist gestern durch)

Dass CodeCompletion/CodeInsight öfters nicht geht, ist aber das Nervigste.
https://www.delphipraxis.net/213868-...chen-will.html
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Yersinian

Registriert seit: 16. Okt 2023
8 Beiträge
 
#8

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 18. Okt 2023, 10:45
LWSAppID := TWindowsString.Create(AppID + THashBobJenkins.GetHashString(ParamStr(0))); Dann wird der exe-Name angezeigt im Titel.

ersetze ich jetzt die AppID durch nen eigenen String, dann steht da sowas wie 'MyString9AD4F5G'

wenn ich alles im Create durch meinen eigenen String ersetze steht dort, das was ich möchte.

Allerdings verschwindet dann in beiden Fällen das Icon daneben.

Woran könnte das liegen?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 20. Nov 2023, 20:28
Hat jemand es mittlerweile hin bekommen, dass man auch auf einen Toast im Action Center klicken kann?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Toast Notification in Windows 10/11 mit Eventhandler

  Alt 20. Nov 2023, 21:01
Nicht mit der Komponente von Embarcadero.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 12:21 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