停止任务栏闪烁
Posted
技术标签:
【中文标题】停止任务栏闪烁【英文标题】:Stop the taskbar flashing 【发布时间】:2010-09-06 23:10:54 【问题描述】:我知道我可以以编程方式使特定窗口的任务栏项在某些情况发生变化时开始闪烁,但是有什么方法可以在一段时间后以编程方式阻止它闪烁,或者至少有一个键盘快捷键我可以让我的用户以某种方式停止闪烁吗?
【问题讨论】:
【参考方案1】:控制闪烁的FlashWindowEx 函数采用FLASHWINFO 结构,该结构有一个uCount 字段来控制它闪烁的次数。此外,dwFlags 字段的一个可能值是 FLASHW_STOP 以导致闪烁停止。
编辑:忘记是一个 C# 标记的问题......所以P/Invoke goodness found here。
【讨论】:
【参考方案2】:您可以考虑使用 NotifyIcon,而不是闪烁 tasbar。这将使您可以在系统托盘上放置一些东西(由于执行此操作的应用程序的激增,许多人认为这是邪恶的东西)。然后,您可以弹出一个气球提示,其中包含实际描述更改本身的任何更改。
使用: (1) 将 NotifyIcon 拖到您的表单上或在您的应用程序中创建 NotifyIcon notify = new NotifyIcon(); (2)设置icon属性为需要的图片 (3)使用Visible属性控制是否在系统托盘上可见 (4) 调用 ShowBalloonText 显示弹出文本(限制为 64 个字符)
无论哪种方式,您都应该在程序中添加一个选项,允许最终用户根据他们对这一切的感受打开/关闭此功能。我个人喜欢通知图标,因为气球文本可以说“服务器宕机”之类的内容
【讨论】:
【参考方案3】:@thomas -- 令人惊讶的是,微软自己的 Windows Vista User Experience Guidelines 同意你的看法......
虽然让背景窗口闪烁其任务栏按钮比让它自动到达顶部并窃取输入焦点要好,但闪烁的任务栏按钮仍然非常具有侵入性。当任务栏按钮闪烁时,用户很难集中注意力,因此您应该假设用户会立即停止他们正在做的事情以使闪烁停止。因此,仅在需要立即注意的情况下才保留任务栏闪烁。
当然,谁知道谁真正遵循这些准则……或者谁甚至读过它们。 :)
【讨论】:
微软不再遵循他们自己的指导方针,因此期望其他软件开发人员可能是不可能的。关于 OP,我个人不喜欢闪烁的任务栏图标、闪烁的窗口焦点、将窗口强制置于顶部的应用程序(通常当我在另一个应用程序中键入时,发生这种情况时,我的键入会激活任何具有焦点的控件并关闭对话框,所以我最终会错过任何通知)或托盘通知。应根据通知类型的具体情况确定。我在应用工具栏/状态栏上显示一个带有悬停气球提示的图标。以上是关于停止任务栏闪烁的主要内容,如果未能解决你的问题,请参考以下文章
FlashWindowEx FLASHW_STOP 仍然使任务栏保持颜色