Dot-Net
如何使 WPF 視窗在工作列上閃爍?
在某個特定時刻,我的 WPF 應用程序需要使用者關注。我知道可以使 Windows 7 工作列圖示以黃色閃爍。
到目前為止我嘗試過:
Window.Activate嘗試將視窗置於前台並啟動它。Window.Focus嘗試將焦點設置到此元素。有什麼建議?
這是一種可能的解決方案:http ://www.jarloo.com/flashing-a-wpf-window/
在程式碼範例中,為 Window 類創建了兩個擴展方法:FlashWindow 和 StopFlashingWindow:
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); 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); }訪問<http://www.jarloo.com/flashing-a-wpf-window/>獲取完整原始碼。
很有趣的場景。我原以為這會很簡單。如果我不得不做類似的事情,我會為這個問題添加書籤:)