FlashWindowEx FLASHW_STOP仍使任务栏保持彩色

时间:2020-03-05 18:41:55  来源:igfitidea点击:

我正在开发控制机器的应用程序。
当我从机器收到错误消息时,用户应该可以直接注意到它,一种完成的方法是刷新任务栏上的托盘。当机器清除错误后,纸盘应停止闪烁。

使用FlashWindowEx函数有点烦人,当我清除窗口的闪烁时,它保持橙色(在我的情况下是winXP)变为橙色(不闪烁)。

[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的已知错误,是否已解决?

解决方案

回答

当窗口完成闪烁的时间达到预期的时间时,行为是相同的:任务栏按钮保持彩色。我不认为这是一个错误。如果考虑一下,当我们使用FLASHW_STOP时,实际上会停止闪烁,但是闪烁的目的是引起用户的注意。该按钮保持彩色状态,因为用户可能仍未向下看并发现哪个窗口正试图引起她的注意。使按钮保持彩色可保持该信息可用。

回答

对不起,我的答复很晚,我没在办公室里。

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

我现在仅使用FLASHW_ALL |进行了修复。 FLASHW_TIMERNOFG组合。

顺便说一句,无法对答案进行评分,还没有足够的代表。