using System;
using System.Drawing;
using System.Runtime.InteropServices;
// The 'windowHandle' parameter will contain the window handle for the:
// - Active window when run by hotkey
// - Window Location target when run by a Window Location rule
// - TitleBar Button owner when run by a TitleBar Button
// - Jump List owner when run from a Taskbar Jump List
// - Currently focused window if none of these match
public static class DisplayFusionFunction
{
public static void Run(IntPtr windowHandle)
{
ScriptHelper.EnumWindows(EnumWindowsCallback);
}
public static bool EnumWindowsCallback(IntPtr windowHandle, IntPtr lParam)
{
ScriptHelper.DisableWindowFlash(windowHandle);
return true;
}
}
public static class ScriptHelper
{
public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
//Stop flashing. The system restores the window to its original state.
public const UInt32 FLASHW_STOP = 0;
[StructLayout(LayoutKind.Sequential)]
private struct FLASHWINFO
{
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
public static bool EnumWindows(EnumWindowsProc enumProc)
{
return EnumWindows(enumProc, IntPtr.Zero);
}
public static bool DisableWindowFlash(IntPtr windowHandle)
{
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = windowHandle;
fInfo.dwFlags = FLASHW_STOP;
fInfo.uCount = 0;
fInfo.dwTimeout = 0;
return FlashWindowEx(ref fInfo);
}
}