| |
VB.NET - Ein- und UmsteigerIst es möglich die Anzeigedauer von Balloon-Nachrichten zu ändern | | | Autor: Dideldum | Datum: 24.06.23 18:17 |
| MS hat ja den "ShowBalloonTip" seiner Überladung beraubt.
https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.notifyicon.showballoontip?f1url=%3FappId%3DDev16IDEF1%26l%3DDE-DE%26k%3Dk(System.Windows.Forms.NotifyIcon.ShowBalloonTip)%3Bk(TargetFrameworkMoniker-.NETFramework%2CVersion%253Dv4.7.2)%3Bk(DevLang-VB)%26rd%3Dtrue&view=windowsdesktop-7.0
Nun habe ich vergeblich versucht, die Anzeigedauer der Balloontip-Nachrichten mittels Registry-Änderung temporär zu ändern.
Laut meiner Recherche sollen die u.g. Registry-Einträge "TooltipDelay" bzw. nach anderen Quellen "MessageDuration" für diese spezielle "Einstellungen für Barrierefreiheit des Systems" und damit der Anzeigedauer der Balloon-Nachrichten verantwortlich sein.
Mein Problem ist dass ich einen ziemlich umfangreichen Text ausgeben muss um der Benutzer auch genug Zeit haben soll, diesen zu lesen und zu erfassen, bevor die Balloon-Nachricht ausgeblendet wird.
Zwischenspeichern der Registry-Einträge, temporäres Ändern dieser Schlüssel auf eigene Werte und Anzeigen der Balloon-Nachricht:
Private Sub NotifyAusgaben(Nachricht As String)
tooltipDelay = My.Computer.Registry.CurrentUser.OpenSubKey("Control" & _
"Panel\Accessibility").GetValue("TooltipDelay")
My.Computer.Registry.CurrentUser.OpenSubKey("Control Panel\Accessibility", _
True).SetValue("TooltipDelay", ( _
My.Settings.Einstellungen_Sicherheitsfragen_Balloontip_Anzeigedauer * _
1000).ToString)
messageDuration = My.Computer.Registry.CurrentUser.OpenSubKey("Control" & _
"Panel\Accessibility").GetValue("MessageDuration")
My.Computer.Registry.CurrentUser.OpenSubKey("Control Panel\Accessibility", _
True).SetValue("MessageDuration", ( _
My.settings.Einstellungen_Sicherheitsfragen_Balloontip_Anzeigedauer * _
1000).ToString)
icn_TaskleistenSymbol.Visible = True
icn_TaskleistenSymbol.BalloonTipTitle = Nachricht
icn_TaskleistenSymbol.BalloonTipText = IO.Path.GetFileNameWithoutExtension( _
VordergrundFensterOwner) & " | " & VordergrundFensterTitel
icn_TaskleistenSymbol.ShowBalloonTip() ' Überladung mit
' My.Settings.Einstellungen_Sicherheitsfragen_Balloontip_Anzeigedauer *
' 1000 funktioniert nicht mehr
end sub Wiederherstellen der originalen Registry-Einträge nach dem Schliessen der Balloon-Nachricht:
Private Sub icn_TaskleistenSymbol_BalloonTipClosed(sender As Object, e As _
EventArgs) Handles icn_TaskleistenSymbol.BalloonTipClosed
My.Computer.Registry.CurrentUser.OpenSubKey("Control Panel\Accessibility", _
True).SetValue("MessageDuration", messageDuration.ToString)
My.Computer.Registry.CurrentUser.OpenSubKey("Control Panel\Accessibility", _
True).SetValue("TooltipDelay", tooltipDelay.ToString)
If My.Settings.Programm_SymbolInTaskleiste = 1 Then
icn_TaskleistenSymbol.Visible = True
Else
icn_TaskleistenSymbol.Visible = False
End If
End Sub Habe es mit neuen DWORD(32 Bit), DWORD(64Bit), Zeichenfolge und Binärwert versucht, da bei mir keiner dieser beiden Einträge existierte und ich daher nicht weiss, welches Format MS für diese Keys erwartet..
Aber alle diese Versuche lassen das System kalt - das Balloon-Nachrichten-Fenster schliesst sich immer nach 5sec.
Wie bekomme ich denn eine Balloon-Nachricht mit einstellbarer Anzeigedauer gebacken?
Hat da vielleicht einer von Euch einen Tip?
Wäre toll - das ist eines der letzten Probleme in meinem neuen Proggi... | |
Re: Ist es möglich die Anzeigedauer von Balloon-Nachrichten zu ändern | | | Autor: Dideldum | Datum: 24.06.23 18:38 |
| P.S. den Tip mit dem Key "MessageDuration" habe ich von hier:
https://www.tenforums.com/tutorials/6175-change-how-long-show-notifications-windows-10-a.html#option3
Der Key "TooltipDelay" soll einstellen, wie lange die Öffnungsverzögerung des Balloon-Nachrichten-Popups sein soll.
Habe mit Sekunden-Einträgen und mit Millisekundeneinträgen getestet - alles erfolglos...
Beitrag wurde zuletzt am 24.06.23 um 18:40:00 editiert. | |
Re: Ist es möglich die Anzeigedauer von Balloon-Nachrichten zu ändern | | | Autor: Dideldum | Datum: 24.06.23 20:02 |
| Ich glaube, ich habe den Fehler...
Der Registry-Watcher hat mich auf eine Spur gebracht:
der korrekte RegistryPfad zum Key "MessageDuration" ist:
"Computer\HKEY_USERS\S-1-5-21-4101106637-555814362-1434368344-1001\Control Panel\Accessibility" - Key "MessageDuration"
Wobei der Zahlensalat wohl die UserID des aktuellen Users ist.
Also lese ich aus:
"Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI" den Key "SelectedUserID" aus, von welchem ich annehme, dass dies der aktuell angemeldete User ist.
In dem Key steht die ID, welche ich für das Auslesen der oben genannten "MessageDuration" brauche.
Private Sub NotifyAusgaben(Nachricht As String)
' ID des aktuellen Users auslesen
selectedUserSID = My.Computer.Registry.LocalMachine.OpenSubKey( _
"SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI").GetVa_
lue("SelectedUserSID")
' MessageDuration auslesen
messageDuration = My.Computer.Registry.Users.OpenSubKey(selectedUserSID & _
"\Control Panel\Accessibility").GetValue("MessageDuration")
' Meine eigene MessageDuration schreiben
My.Computer.Registry.Users.OpenSubKey(selectedUserSID & "\Control" & _
"Panel\Accessibility", True).SetValue("MessageDuration", ( _
My.Settings.Einstellungen_Sicherheitsfragen_Balloontip_Anzeigedauer))
' Symbol anzeigen
icn_TaskleistenSymbol.Visible = True
' Title reinschreiben
icn_TaskleistenSymbol.BalloonTipTitle = Nachricht
' Untertitel reinschreiben
icn_TaskleistenSymbol.BalloonTipText = IO.Path.GetFileNameWithoutExtension( _
VordergrundFensterOwner) & " | " & VordergrundFensterTitel
' Balloon-Nachricht anzeigen
icn_TaskleistenSymbol.ShowBalloonTip( _
My.Settings.Einstellungen_Sicherheitsfragen_Balloontip_Anzeigedauer)
' Weil - warum auch immer die folgende Sub "BalloonTipClosed" nicht wie
' erwartet automatisch nach Zeitablauf der "MessageDuration" selbst
' aufgerufen wird, einen Delay-Aufruf mit meiner "MessageDuration" starten
Delay(My.Settings.Einstellungen_Sicherheitsfragen_Balloontip_Anzeigedauer)
' Wenn Zeit abgelaufen, das Taskleistensymbol ausblenden. Dadurch erst wird
' die folgende Sub "BalloonTipClosed" aufgerufen
icn_TaskleistenSymbol.Visible = False
End Sub
Private Sub icn_TaskleistenSymbol_BalloonTipClosed(sender As Object, e As _
EventArgs) Handles icn_TaskleistenSymbol.BalloonTipClosed
' Original "MessageDuration in Registry schreiben
My.Computer.Registry.Users.OpenSubKey(selectedUserSID & "\Control" & _
"Panel\Accessibility", True).SetValue("MessageDuration", messageDuration)
' Taskleistensymbol wieder anzeigen, wenn Einstellungen = "Symbol in" & _
"Taskleiste"
icn_TaskleistenSymbol.Visible = My.Settings.ICE_SymbolInTaskleiste
End Sub
Public Sub Delay(nSekunden As Long)
Dim TimeOut As Long
TimeOut = (GetTickCount / 1000) + nSekunden
Do
Application.DoEvents()
Loop Until TimeOut < (GetTickCount / 1000)
End Sub Ist das so richtig und funktioniert auf allen Rechnern bei allen Benutzern? | |
Re: Ist es möglich die Anzeigedauer von Balloon-Nachrichten zu ändern | | | Autor: Manfred X | Datum: 30.06.23 09:42 |
| Hallo!
Der Tooltip ist nicht für ländere Erklärungen vorgesehen,
sondern soll nur eine kurze "Gedächtnisstütze" für den Benutzer sein.
Ich empfehle, bei erklärungsbedürftigen Formularen die
kontext-sensitive Hilfe zu nutzen.
Der Benutzer kann dann - nach Kenntnisnahme des Tooltips - selbst entscheiden,
ob er einen umfangreicheren Informationstext abrufen möchte.
Ich rate davon ab, in der Windows-Registry Schlüssel-Werte zu ändern. | |
Re: Ist es möglich die Anzeigedauer von Balloon-Nachrichten zu ändern | | | Autor: Dideldum | Datum: 06.07.23 22:52 |
| Hi Manfred,
was war denn ein Woche lang mit diesem Forum los?
Danke Dir!
Da hast schon recht.
Die Infos sind eigentlich nur die Ausgabe eines u.U. längeren Dateipfads, in welchem die entsprechenden Objekte gespeichert wurden.
Damit die Leuts diesen auch komplett lesen können, habe ich mich an der Verlängerung der von MS beschnittenen Anzeigedauer versucht.
Leider ergebnislos.
Meine Registry-Änderungen werden zwar angenommen, aber MS speichert die in der "Erleichterten Bedienung" eingestellte Anzeigezeit für die Balloon-Nachrichten wohl verschlüsselt noch woanders und hat diesen Eintrag nur aus Abwärtskompatibilitätsgründen noch in der Registry.
Vermute ich zumindest nachdem, was der Registry-Watcher sagt.
Da habe ich wohl keine Chance, das per Software einzustellen.
Habe jetzt in den Hilfe-Dokumenten beschrieben, wie die Benutzer in den o.g. Einstellungen selbst eine Zeit definieren können.
Ist nur schade, denn per Programm hätte ich nur mein Proggi die Zeit hochsetzen können und bei Programmende den vorherigen Wert wiederherstellen können.
Beste Grüsse | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|