Created
January 23, 2014 20:30
-
-
Save brainded/8586185 to your computer and use it in GitHub Desktop.
Neat little extension file for C# that allows a standard Window to flash when something is done. See http://www.jarloo.com/ for more C# stuff like this.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Runtime.InteropServices; | |
using System.Windows; | |
using System.Windows.Interop; | |
namespace Jarloo | |
{ | |
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); | |
#endregion | |
public static void FlashWindow(this Window win, UInt32 count = UInt32.MaxValue) | |
{ | |
//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_ALL | FLASHW_TIMER, | |
uCount = count, | |
dwTimeout = 0 | |
}; | |
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); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment