天天看点

关于任务栏气球提示的超时时间问题

大家可能看到如下图这样的提示窗口,我们叫它们气球提示,我细看了一下,嗯,确实有点气球的样子,特别是底下还牵着一根线。

关于任务栏气球提示的超时时间问题
关于任务栏气球提示的超时时间问题
关于任务栏气球提示的超时时间问题
关于任务栏气球提示的超时时间问题

在外壳中,有这样一个API: Shell_NotifyIcon,可能从API的名称上看不出它具体做什么。它的主要目的是:向任务栏的状态区域发送一条消息。它有两个参数:

dwMessage: 用来指定需要执行何种操作。例如,可以向任务栏添加/修改/删除一个图标。

lpData: 这是一个指向NOTIFYICONDATA结构体的指针,其内容取决于dwMessage的值。它的作用是用来定义被添加到任务栏的图标,或者显示一个通知图标,或者定位一个图标然后对它进行修改或删除。

今天我们要关注的是,这个API用来显示一个任务栏气球提示的行为。在关于NOTIFYICONDATA结构的描述文档中,有一个uTimeout的成员,它用来指定气球提示将显示多长的时间。但是,当显示提示的时候,恰巧用户不在计算机旁,会发生什么呢?

过了30秒后,气球提示将会超时,用户可能会错过这条提示消息。

别担心。任务栏会持续追踪用户是否在使用计算机(通过调用GetLastInputInfo),如果用户不在计算机旁,则它不会启动30秒的定时器。这就意味着,无论如何,用户都会有机会看到这个气球提示并有30秒钟的交互时间。

但是,如果你想在用户不在计算机旁时,依然对提示消息设置一个超时时间,该如何实现呢?实际上,你可以看看我上面提到的技术文档,看看是否可以找到一个比在一个气球提示上模拟点击的方案更好的方案。

提示:可以试试将气球提示的文本设置为空字符串。

如果你希望将气球提示显示的时间设置为更长的时间,该如何实现?

很遗憾,这不大可行。对于单个气球提示来说,任务栏的通知区域将始终设置一个30秒的超时时间。因为如果用户在30秒的时间内,都没有对提示做出任何回应,则用户可能对这条信息并不感兴趣。

如果你发出的消息十分重要,那请不要使用通知气球,因为通知气球只适用于那些对用户来说不太重要的提醒消息。

总结

最后