首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlashWindowEx FLASHW_STOP仍然保持任务栏为彩色

FlashWindowEx FLASHW_STOP仍然保持任务栏为彩色
EN

Stack Overflow用户
提问于 2008-08-22 09:42:41
回答 5查看 3.4K关注 0票数 5

我正在开发一个控制机器的应用程序。

当我收到来自机器的错误时,用户应该能够直接注意到它,其中一种方法是闪烁任务栏上的托盘。当机器清除错误时,托盘应停止闪烁。

使用FlashWindowEx函数有一个小麻烦,当我清除窗口的闪烁时,它仍然是橙色(在我的例子中是winXP) (而不是闪烁)。

代码语言:javascript
复制
    [Flags]
        public enum FlashMode {
            /// 
            /// Stop flashing. The system restores the window to its original state.
            /// 
            FLASHW_STOP = 0,
            /// 
            /// Flash the window caption.
            /// 
            FLASHW_CAPTION = 1,
            /// 
            /// Flash the taskbar button.
            /// 
            FLASHW_TRAY = 2,
            /// 
            /// Flash both the window caption and taskbar button.
            /// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags.
            /// 
            FLASHW_ALL = 3,
            /// 
            /// Flash continuously, until the FLASHW_STOP flag is set.
            /// 
            FLASHW_TIMER = 4,
            /// 
            /// Flash continuously until the window comes to the foreground.
            /// 
            FLASHW_TIMERNOFG = 12
        }

        public static bool FlashWindowEx(IntPtr hWnd, FlashMode fm) {
            FLASHWINFO fInfo = new FLASHWINFO();

            fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
            fInfo.hwnd = hWnd;
            fInfo.dwFlags = (UInt32)fm;
            fInfo.uCount = UInt32.MaxValue;
            fInfo.dwTimeout = 0;

            return FlashWindowEx(ref fInfo);
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct FLASHWINFO {
            public UInt32 cbSize;
            public IntPtr hwnd;
            public UInt32 dwFlags;
            public UInt32 uCount;
            public UInt32 dwTimeout;
        }

在我的例子中,我使用FLASHW_TRAY开始闪烁,使用FLASHW_STOP停止闪烁。

是我做错了什么,还是这是WinXP的一个已知错误,有没有修复它的方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-08-22 19:33:47

当窗口完成闪烁时,其行为是相同的:任务栏按钮保持彩色。我不认为这是个bug。如果你想一想,当你使用FLASHW_STOP时,闪烁确实会停止,但闪烁的目的是为了引起用户的注意。按钮仍然是彩色的,因为用户可能仍然没有往下看,没有发现哪个窗口试图引起她的注意。保持按钮的颜色可以确保该信息可用。

票数 4
EN

Stack Overflow用户

发布于 2014-03-05 22:37:30

下面是一个错误:

fInfo.uCount = UInt32.MaxValue;

使用FLASHW_STOP参数调用时,应将fInfo.uCount设置为零。否则,当您尝试在任务栏按钮处于活动状态时调用stop时,它将保持活动状态。

您可以在此处查看有关未定义行为的说明:http://msdn.microsoft.com/en-us/library/windows/desktop/ms679348(v=vs.85).aspx

我知道这是一个古老的帖子,但它可以帮助其他人快速解决这个问题。

票数 4
EN

Stack Overflow用户

发布于 2008-09-01 08:25:53

很抱歉回复晚了,我不在办公室。

如果这是预期的功能,我认为它不是那么有用,至少应该有一个重置。

我现在只用FLASHW_ALL | FLASHW_TIMERNOFG组合就解决了这个问题。

顺便说一句,我不能给你的答案打分,还没有足够的代表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档