zoukankan      html  css  js  c++  java
  • WPF任务栏图标闪烁

    碰到一个小问题,用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);
            }
        }
  • 相关阅读:
    parent和top
    history
    [矩阵快速幂]T-shirt(2018江苏邀请赛I题)
    [学习]Java学习
    [数论]Factors of Factorial
    [RMQ][ST算法]Frequent values
    [二维树状数组]计数问题
    [树状数组]Mishka and Interesting sum(codeforces703D)
    [简单思维题]Snuke's Coloring 2-1
    [树状数组][逆序数]Ultra-QuickSort
  • 原文地址:https://www.cnblogs.com/lihan829/p/9650967.html
Copyright © 2011-2022 走看看