Seite 1 von 1

Desktop Benachrichtigung

Verfasst: Fr, 17. Feb 2023 16:07
von Dominik Krebs
Hallo zusammen,
kann im Forum nichts finden. Sendet jemand Desktop-Benachrichtigungen mittels Xbase++?

Re: Desktop Benachrichtigung

Verfasst: Sa, 18. Feb 2023 23:38
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

Re: Desktop Benachrichtigung

Verfasst: So, 19. Feb 2023 11:27
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) 6742 mal betrachtet

Re: Desktop Benachrichtigung

Verfasst: So, 19. Feb 2023 19:50
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.

Re: Desktop Benachrichtigung

Verfasst: Mo, 20. Feb 2023 1:42
von AUGE_OHR
hi,

das ganze basiert auf der Shell_NotifyIcon API und der NOTIFYICONDATA Structure
TrayBallon.jpg
TrayBallon.jpg (8.01 KiB) 6707 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

Re: Desktop Benachrichtigung

Verfasst: Mo, 20. Feb 2023 15:15
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?

Re: Desktop Benachrichtigung

Verfasst: Mo, 20. Feb 2023 15:20
von Tom

Re: Desktop Benachrichtigung

Verfasst: Di, 21. Feb 2023 10:01
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?

Re: Desktop Benachrichtigung

Verfasst: Di, 21. Feb 2023 14:53
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) 6585 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)


Re: Desktop Benachrichtigung

Verfasst: Di, 21. Feb 2023 17:41
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

Re: Desktop Benachrichtigung

Verfasst: Mi, 22. Feb 2023 8:47
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.

Re: Desktop Benachrichtigung

Verfasst: Mi, 22. Feb 2023 10:21
von Marcus Herz
Du hast die W = unicode Version aufgerufen. Du musst die A = ansi nehmen

Re: Desktop Benachrichtigung

Verfasst: Mi, 22. Feb 2023 10:24
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

Re: Desktop Benachrichtigung

Verfasst: Mi, 22. Feb 2023 10:54
von Dominik Krebs
Super, damit wird der Text richtig angezeigt.
Aber ich bekomme immer noch keine Balloon-Notification, lediglich ein Icon im Task bereich.

Re: Desktop Benachrichtigung

Verfasst: Mi, 01. Mär 2023 22:08
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.

Re: Desktop Benachrichtigung

Verfasst: Do, 09. Mär 2023 15:34
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

Re: Desktop Benachrichtigung

Verfasst: Fr, 10. Mär 2023 13:35
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...

Re: Desktop Benachrichtigung

Verfasst: Fr, 10. Mär 2023 13:45
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.

Re: Desktop Benachrichtigung

Verfasst: Fr, 10. Mär 2023 14:06
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

Re: Desktop Benachrichtigung

Verfasst: Fr, 10. Mär 2023 16:23
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

Re: Desktop Benachrichtigung

Verfasst: Sa, 11. Mär 2023 10:40
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"

Re: Desktop Benachrichtigung

Verfasst: Fr, 29. Dez 2023 14:09
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