作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个控制机器的应用程序。
当我从机器收到错误时,用户应该能够直接注意到它,一种方法是在任务栏上闪烁托盘。当机器清除错误时,托盘应该停止闪烁。
使用 FlashWindowEx
函数有一个小烦恼,当我清除窗口的闪烁时,它保持(在我的情况下是 WinXP)橙色(不闪烁)。
[Flags]
public enum FlashMode {
/// <summary>
/// Stop flashing. The system restores the window to its original state.
/// </summary>
FLASHW_STOP = 0,
/// <summary>
/// Flash the window caption.
/// </summary>
FLASHW_CAPTION = 1,
/// <summary>
/// Flash the taskbar button.
/// </summary>
FLASHW_TRAY = 2,
/// <summary>
/// Flash both the window caption and taskbar button.
/// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags.
/// </summary>
FLASHW_ALL = 3,
/// <summary>
/// Flash continuously, until the FLASHW_STOP flag is set.
/// </summary>
FLASHW_TIMER = 4,
/// <summary>
/// Flash continuously until the window comes to the foreground.
/// </summary>
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
时,闪烁实际上确实停止了,但闪烁的目的是引起用户的注意。按钮保持彩色是因为用户可能还没有向下看并发现哪个窗口正试图引起她的注意。使按钮保持彩色可确保该信息可用。
关于c# - FlashWindowEx FLASHW_STOP 仍然保持任务栏彩色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21987/
我正在开发一个控制机器的应用程序。 当我从机器收到错误时,用户应该能够直接注意到它,一种方法是在任务栏上闪烁托盘。当机器清除错误时,托盘应该停止闪烁。 使用 FlashWindowEx 函数有一个小烦
我是一名优秀的程序员,十分优秀!