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
组合。
顺便说一句,无法对答案进行评分,还没有足够的代表。