| |
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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|