碰到一个小问题,用WPF开发win上的窗口程序时,当程序收到服务器返回的数据时,希望给用户一点提示,当然,可以做弹窗提示,也可以给声音提示。
但是除此之外,我还想让它在任务栏里的图片闪烁,就像在win7上使用QQ,收到别人新发过来的消息一个样子,怎么做呢,搜了一下,就是这个:https://blog.csdn.net/doitplayer/article/details/72673391
尝试了一下,确实有用,这里记录一下备忘:
public static class WindowExtensions { #region Window Flashing API Stuff private const UInt32 FLASHW_STOP = 0; //Stop flashing. The system restores the window to its original state. private const UInt32 FLASHW_CAPTION = 1; //Flash the window caption. private const UInt32 FLASHW_TRAY = 2; //Flash the taskbar button. private const UInt32 FLASHW_ALL = 3; //Flash both the window caption and taskbar button. private const UInt32 FLASHW_TIMER = 4; //Flash continuously, until the FLASHW_STOP flag is set. private const UInt32 FLASHW_TIMERNOFG = 12; //Flash continuously until the window comes to the foreground. [StructLayout(LayoutKind.Sequential)] private struct FLASHWINFO { public UInt32 cbSize; //The size of the structure in bytes. public IntPtr hwnd; //A Handle to the Window to be Flashed. The window can be either opened or minimized. public UInt32 dwFlags; //The Flash Status. public UInt32 uCount; // number of times to flash the window public UInt32 dwTimeout; //The rate at which the Window is to be flashed, in milliseconds. If Zero, the function uses the default cursor blink rate. } [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool FlashWindowEx(ref FLASHWINFO pwfi); [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); #endregion public static void FlashWindow(this Window win, UInt32 count = UInt32.MaxValue, UInt32 interval = 500) { //Don't flash if the window is active if (win.IsActive) return; WindowInteropHelper h = new WindowInteropHelper(win); FLASHWINFO info = new FLASHWINFO { hwnd = h.Handle, dwFlags = FLASHW_TRAY | FLASHW_TIMER, uCount = count, dwTimeout = interval }; info.cbSize = Convert.ToUInt32(Marshal.SizeOf(info)); FlashWindowEx(ref info); } public static void StopFlashingWindow(this Window win) { WindowInteropHelper h = new WindowInteropHelper(win); FLASHWINFO info = new FLASHWINFO(); info.hwnd = h.Handle; info.cbSize = Convert.ToUInt32(Marshal.SizeOf(info)); info.dwFlags = FLASHW_STOP; info.uCount = UInt32.MaxValue; info.dwTimeout = 0; FlashWindowEx(ref info); } }