Desktop Benachrichtigung

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Hallo zusammen,
kann im Forum nichts finden. Sendet jemand Desktop-Benachrichtigungen mittels Xbase++?
Gruß Dominik
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Desktop Benachrichtigung

Beitrag von AUGE_OHR »

hi,
Dominik Krebs hat geschrieben: Fr, 17. Feb 2023 16:07kann im Forum nichts finden. Sendet jemand Desktop-Benachrichtigungen mittels Xbase++?
meinst du Benachrichtigungen die rechts unten "rauskommen" :?:

wenn ja dann schau dir mal CLASS TNotifyIcon() aus OT4XB an
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Desktop Benachrichtigung

Beitrag von Tom »

Ich nutze (immer noch) das Popup-Control von Codejock, aber eigentlich wollte ich das längst loswerden.
hsc_nachricht.png
hsc_nachricht.png (120.72 KiB) 6734 mal betrachtet
Herzlich,
Tom
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Ja die von Tom meine ich.
Ich dachte das ist irgend ein DLL Aufruf, der nicht so kompliziert ist.
Codejock sagt mir leider nichts.
Ot4xb nutze ich tatsächlich nicht.
Gruß Dominik
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Desktop Benachrichtigung

Beitrag von AUGE_OHR »

hi,

das ganze basiert auf der Shell_NotifyIcon API und der NOTIFYICONDATA Structure
TrayBallon.jpg
TrayBallon.jpg (8.01 KiB) 6699 mal betrachtet
unter Xbase++ v2.x gibt es inzwischen auch Structure und man braucht kein BAP dafür
es ist also "möglich" ohne Ot4xb das ganze nachzubauen da Pablo Ot4xb "scheinbar" nicht weiter entwickelt
gruss by OHR
Jimmy
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Das ist schon mal ein guter Anfang. Danke.

Jetzt muss ich mich erstmal mit dem STRUCTURE UND EXTERN beschäftigen.
Hab das noch nicht so ganz verstanden.
Hast du etwas woran ich mich orientieren kann?
Gruß Dominik
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Desktop Benachrichtigung

Beitrag von Tom »

Herzlich,
Tom
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Ich habe mich am STRUCT versucht, aber ich bekomme immer wieder dllprepare fehler.
Sehe ich das richtig das Konstanten als HEX werte angegeben werden müssen?
Gruß Dominik
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Also ich bin jetzt soweit, bekomme aber immer noch folgenden Fehler:
Screenshot 2023-02-21 145034.png
Screenshot 2023-02-21 145034.png (14.95 KiB) 6577 mal betrachtet

Code: Alles auswählen

EXTERN BOOL Shell_NotifyIconA(nTYPE AS LONG, oNotificationData AS STRUCTURE) IN SHELL32.DLL

Code: Alles auswählen

STRUCTURE NOTIFYICONDATAA
      VAR cbSize              		AS UINTEGER
      VAR hWnd                		AS UINTEGER
      VAR uID                 		AS UINTEGER
      VAR uFlags              		AS UINTEGER
      VAR uCallbackMessage    	AS UINTEGER
      VAR hIcon               		AS UINTEGER
      VAR szTip               		AS STRING[32]
ENDSTRUCTURE

Code: Alles auswählen

LOCAL oNotificationData AS STRUCTURE NOTIFYICONDATAA

         oNotificationData:hWnd              := oOwner:gethwnd()
         oNotificationData:uID               := 100
         oNotificationData:uFlags            := 0x00000004
         *oNotificationData:uCallbackMessage  := 0x00000001
         *oNotificationData:hIcon             := 0x00000000
         oNotificationData:szTip             := "Test"
         oNotificationData:cbSize            := oNotificationData:SizeOf()

         Shell_NotifyIconA(0x00000004,oNotificationData)

Gruß Dominik
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Desktop Benachrichtigung

Beitrag von Marcus Herz »

Eventuell hilft es aber die Structur mit @ zu übergeben

Code: Alles auswählen

LOCAL oNotificationData AS STRUCTURE NOTIFYICONDATAA

         oNotificationData:hWnd              := oOwner:gethwnd()
         oNotificationData:uID               := 100
         oNotificationData:uFlags            := 0x00000004
         *oNotificationData:uCallbackMessage  := 0x00000001
         *oNotificationData:hIcon             := 0x00000000
         oNotificationData:szTip             := "Test"
         oNotificationData:cbSize            := oNotificationData:SizeOf()

         Shell_NotifyIconA(0x00000004,@oNotificationData)
Laut meiner API Doku muss es lauten

Code: Alles auswählen

STRUCTURE NOTIFYICONDATAA
      VAR cbSize              		AS UINTEGER
      VAR hWnd                		AS UINTEGER
      VAR uID                 		AS UINTEGER
      VAR uFlags              		AS UINTEGER
      VAR uCallbackMessage    	AS UINTEGER
      VAR hIcon               		AS UINTEGER
      VAR szTip               		AS STRING[64]
      VAR dwState                       AS UINTEGER
      VAR dwStateMask               AS UINTEGER
      VAR szInfo                          AS STING[256]
      VAR uTimeout                    AS UINTEGER
     VAR  szInfoTitle                  AS STRING[ 64]
     VAR dwInfoFlags                 AS UINTEGER
    VAR  guidItem                     AS STRUCTURE GUID
    // ALTERNATIV, wenn man die GUID nicht braucht, kann man einfach die Größe als String deklarieren
    // VAR guiditem                AS STRING[16]
    
    VAR hBalloonIcon              AS UINTEGER

ENDSTRUCTURE

STRUCTURE GUID
  VAR Data1  AS UINTEGER
  VAR Data2 AS SHORT
  VAR Data3 AS SHORT
   VAR Data4 as STRING[8]
ENDSTRUCTURE
PS:

Code: Alles auswählen

       *oNotificationData:uCallbackMessage  := 0x00000001
scheint mir falsch zu sein, hier wird ein Handle auf eine hWnd Fenster erwartet, übergib 0
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Hallo Marcus,
ich habe meinen Code angepasst.

Code: Alles auswählen

STRUCTURE NOTIFYICONDATAW
         VAR cbSize               AS UINTEGER
         VAR hWnd                 AS UINTEGER
         VAR uID                  AS UINTEGER
         VAR uFlags               AS UINTEGER
         VAR uCallbackMessage     AS UINTEGER
         VAR hIcon                AS UINTEGER
         VAR szTip                AS STRING[128]
         VAR dwState              AS UINTEGER
         VAR dwStateMask          AS UINTEGER
         VAR szInfo               AS STRING[128]
         VAR szInfoTitle          AS STRING[64]
         VAR dwInfoFlags          AS UINTEGER
         VAR guidItem             AS STRING[16]
         VAR hBalloonIcon         AS UINTEGER
ENDSTRUCTURE

Code: Alles auswählen

LOCAL oNotificationData AS STRUCTURE NOTIFYICONDATAW
LOCAL oIcon


         oIcon := XbpIcon():New():Create()
         oIcon:Load(,22)

          oNotificationData:cbSize            := oNotificationData:SizeOf()
         oNotificationData:hWnd              := oOwner:gethwnd()
         oNotificationData:uID               := oNotificationData:SizeOf()
         oNotificationData:uFlags            := BOr(NIF_MESSAGE,NIF_ICON,NIF_TIP,NIF_INFO)
         oNotificationData:uCallbackMessage  := oOwner:gethwnd()
         oNotificationData:hIcon             := oIcon:Handle
         oNotificationData:hBalloonIcon      := oIcon:Handle
         oNotificationData:szTip             := "Dies ist ein Beispiel-Tooltip"
         oNotificationData:szInfo            := "Dies ist ein Beispiel-Tooltip"
         oNotificationData:szInfoTitle       := "Test"
         oNotificationData:dwInfoFlags       := NIIF_INFO

         Shell_NotifyIconW(NIM_ADD ,oNotificationData)


Als Ergebnis erhalte ich auch ein TRUE zurück.

Es erscheint ein Icon in der Taskbar, aber keine Balloon-Notification. Auch der "Tip" des Icons hat Chinesische Zeichen.
Gruß Dominik
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Desktop Benachrichtigung

Beitrag von Marcus Herz »

Du hast die W = unicode Version aufgerufen. Du musst die A = ansi nehmen
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Desktop Benachrichtigung

Beitrag von Marcus Herz »

Du kannst bei der extern Deklaration sowohl das A als sich das W weglassen. Xbase lädt automatisch die richtige Funktion.
Aber die Idee mit der notifikation gefällt mir. Werd ich nächste Woche gleich implementieren
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Super, damit wird der Text richtig angezeigt.
Aber ich bekomme immer noch keine Balloon-Notification, lediglich ein Icon im Task bereich.
Gruß Dominik
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Also ich habe alles versucht, aber ich bekomme es nicht hin.
Mehr als ein icon in der Taskleiste kommt einfach nicht bei raus.
Gruß Dominik
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Desktop Benachrichtigung

Beitrag von ssemleit »

Weil ich auch gerade an der EXTERN Front mit einer Structur zu tun hatte.
Markus meinte ja schon, dass vielleicht die Structur als Referenz übergeben werden sollte.
Das muss aber bei der Deklaration per EXTERN und nicht beim Aufruf erfolgen.

Also statt: EXTERN BOOL Shell_NotifyIconA(nTYPE AS LONG, oNotificationData AS STRUCTURE) IN SHELL32.DLL
so: EXTERN BOOL Shell_NotifyIconA(nTYPE AS LONG, @oNotificationData AS STRUCTURE) IN SHELL32.DLL

Gruß
Stefan
Gruß
Stefan
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Hallo Stefan,
ich habe die Übergabe als Referenz bereits durchgespielt und es funktioniert auch nur als Referenzübergabe.

Ich versuche im Laufe des Tages meinen aktuellen Code zu teilen.

Mein Problem ist das ich es nicht schaffe eine Ballon Notification anzuzeigen.

Lediglich ein Icon in der Taskbar lässt sich hinzufügen, verändern sowie löschen.
Aber die Benachrichtigung bleibt aus, das Icon hingegen brauche ich eigentlich gar nicht...
Gruß Dominik
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Desktop Benachrichtigung

Beitrag von Marcus Herz »

Ja ich bin da auch dran, und genausoweit wie du. Obwohl ich einen C++ Code identisch umgesetzt habe, der Balloon kommt nicht.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Desktop Benachrichtigung

Beitrag von ssemleit »

Bei meinem Problem ging es um eine andere Funktion, nicht um die Shell_NotifyIconA, aber eben mit einer Structure.
Ich dachte nur, weil das @ bei der EXTERN Deklaration fehlte, dass ich das hier anspreche.
Sorry, wenn ihr dachtet, dass ich auch an den Balloon-Notifications arbeite.

Gruß
Stefam
Gruß
Stefan
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Desktop Benachrichtigung

Beitrag von Marcus Herz »

Jetzt hab ich mal das C++ Beispiel von Microsoft von GitHub runtergeladen und mit VS die EXE erzeugt. Das kommt auch kein Balloon. ;-(


Jetzt ist aber erst mal Wochenende
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Desktop Benachrichtigung

Beitrag von AUGE_OHR »

hi Marcus,
Marcus Herz hat geschrieben: Fr, 10. Mär 2023 16:23 Jetzt hab ich mal das C++ Beispiel von Microsoft von GitHub runtergeladen und mit VS die EXE erzeugt. Das kommt auch kein Balloon. ;-(
das ist nicht ganz richtig so

es funktioniert mit der aktuellen Version 10.0.19045.2673, aber nur in der 32 Bit Version in einem 32 Bit OS !
Microsoft hat "irgendwann" es in der 64 Bit "unbrauchbar" gemacht wohl auch wegen Taskleiste von Windows 11 was nur 64 Bit ist

ein "Gerücht" besagt das die "Mitteilungen", welche nur für Windows sein sollten, auch für Werbung (!) genutzt wurde
daraufhin hat Microsoft die "Rechte" verändert so das es nicht mehr funktioniert ... aber nur in der 64 Bit Version

bei einem 32 Bit OS scheint es nicht "zu wirken" ,,, vermutlich hat sich da keine Gedanken darüber gemacht

---

ich nutze noch die "alte" Hotplug.DLL womit man ein USB-Device "auswerfen" konnte
"das" hat Microsoft auch blockiert aber es gibt einen Aufruf an den man noch ran kommt

das "abmelden", was "blockiert wurde, habe ich nun selbst geschrieben aber das "fly-out" ...
das ist nun die Stelle wo der "Ballon" raus kommt und "meinen" Text anzeigt

Code: Alles auswählen

LOCAL cRoot   := "RUNDLL32.EXE "
LOCAL cPath   := GETENV( "TEMP" ) + "\"
LOCAL cAction := GETENV( "SYSTEMROOT" ) + "\SYSTEM32\HOTPLUG.DLL"

   cAction += ",HotPlugSafeRemovalDriveNotification "
   cAction += VOLUMENAME( cDriveLetter + ":\" )
   cAction += " ("
   cAction += cDriveLetter + ":)"

   MEMOWRIT( cPath + "ShowMsg.BAT", cRoot + cAction )
   ShellExecute( 0, "open", cPath + "ShowMsg.BAT",,, SW_HIDE )

   hb_IdleSleep( 2.0 )
   FERASE( cPath + "ShowMsg.BAT" )
das funktioniert auch unter 64 Bit und Windows 11 :!:

es gibt also immer noch einen Notify Event auf den "fly-out" reagiert. man muss den "nur" finden ...

---

ich habe mal im FiveWin Forum gefragt und man sagte mir das solche Sachen nun mit TOAST gemacht werden

ich habe mir die Fivewin CLASS TToast man angesehen
es wird nun viel "gemalt", mit Windows API Function, und Notify Events "abgefangen"
https://msdn.microsoft.com/en-us/librar ... mplatetype

---

nur wird das ganze viel zu "aufwendig" wenn man "selbst" das "fly-out" einleitet
ein Fenster ohne Titlebar und mit Timeout was per "Animation" raus kommt ist doch ein "Klacks"
gruss by OHR
Jimmy
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Desktop Benachrichtigung

Beitrag von Dominik Krebs »

Es ist zwar nicht die schönste Lösung, aber es ist eine.
Ich habe es nun über SnoreToast gelöst. Funktioniert.

https://github.com/KDE/snoretoast
Gruß Dominik
Antworten