如何显示超过63个字符的系统托盘工具提示?如何显示超过63个字符的系统托盘工具提示?NotifyIcon.Text有63个字符的限制,但我看到VNC服务器有更长的工具提示。我怎样才能做一个VNC服务器?实际上,这是Text属性的属性设置器中的错误。Windows窗体中NOTIFYICONDATA的P/Invoke声明使用128个字符限制。你可以用反射来破解它:使用系统;使用System.Windows.Forms;使用System.Reflection;publicclassFixes{publicstaticvoidSetNotifyIconText(NotifyIconni,stringtext){if(text.Length>=128)thrownewArgumentOutOfRangeException("Textlimitedto127characters");输入t=typeof(NotifyIcon);BindingFlags隐藏=BindingFlags.NonPublic|BindingFlags.Instance;t.GetField("文本",隐藏).SetValue(ni,文本);if((bool)t.GetField("added",hidden).GetValue(ni))t.GetMethod("UpdateIcon",hidden).Invoke(ni,newobject[]{true});}}来自Win32NOTIFYICONDATA结构MSDN文档:szTip一个以null结尾的字符串,指定标准工具提示的文本。它最多可以包含64个字符,包括终止空字符。对于Windows2000(Shell32.dll5.0版)及更高版本,szTip最多可包含128个字符,包括终止空字符。看起来Windows窗体库支持这里的最小公分母。扩展bk1e的正确答案。在后台,WinForms中的系统托盘图标被实现为Win32通知图标。所以winforms版本具有作为本机版本的所有限制。工具提示大小限制只是一个例子。我最近遇到了类似的问题。我没有破解后端,而是使用了BalloonTipText,它可以容纳很多字符。工具提示显示在托盘图标上的第一个MouseMove事件上,工具提示显示2秒。工具提示关闭后,可以通过新的MouseMove事件重新打开。此解决方案的唯一缺点是,当用户离开图标区域时,无法以编程方式消除气球,因此它只会在超时后或用户点击小X按钮时消失。请注意,标题和文本可以随时在程序的其他地方设置。它们仅用于演示目的。编辑:ShowBalloonTip()触发添加级联的MouseMove事件,因此必须禁用此事件,直到气球工具提示被隐藏。此外,BalloonTipClosed(根据文档)仅在用户主动点击“X”时触发,但我发现它在工具提示超时后关闭时触发。因此,我没有依赖BalloonTipClosed事件,而是添加了一个辅助计时器来重置状态。修改测试代码如下:privateboolballoonTipShown;私人计时器气球计时器;privatevoidtrayIcon_MouseMove(objectsender,MouseEventArgse){if(balloonTipShown){返回;}balloonTipShown=true;);balloonTimer.Tick+=balloonTimer_Tick;balloonTimer.Interval=2005;balloonTimer.Start();trayIcon.ShowBalloonTip(2000);}voidballoonTimer_Tick(objectsender,EventArgse){balloonTipShown=false;.处置();trayIcon.MouseMove+=trayIcon_MouseMove;编辑2:可以在博客中看到带有大量利用此解决方案的文本的气球工具提示的屏幕截图。bk1e这里说限制是128个字符,现在,如果你使用UTF-16,这是Windows中的本机unicode格式,尤其是.NET,这意味着你被限制为64个字符,包括NUL。我相信您正在使用将工具提示限制为64个16位字符(包括空值)的unicodeAPI,而VNC服务器使用ascii(或ANSI)api,它允许128个8位字符(包括空值)。编辑:这个答案是错误的,这是CodyGray的一条有用的评论,解释了原因:这个推理很有说服力,但实际上并不正确。当MSDN文档谈到“字符”时,它实际上是指数组中char或wchar_t项的数量(取决于您是否以Unicode为目标)。因此,当在Windows2000+上运行时,您将获得承诺的全部128个字符。Windows9x限制为64个字符。–CodyGrayJun19th4:11《以上是C#学习教程:如何显示超过63个字符的系统托盘tooltip?全部内容分享,如果对大家有用需要进一步了解C#学习教程,希望大家注意——本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处:
