我的程序需要一些时间来完成计算,因此我想在运行它时读取一些网页,并在屏幕闪烁时(完成计算的通知)返回我的程序。唯一缺失的部分是 - 如何在C#中闪烁整个屏幕?如果这很重要,我使用WPF。请注意 - 我的程序不可见,其他程序(例如Web浏览器)占据整个屏幕(这就是问题的关键,否则,我根本不需要任何通知)。闪烁= 闪烁。
我的第一个建议是:在计算完成后,让您的程序打开一个顶层窗口,并将其设置为透明背景和某种颜色(例如白色),然后再关闭该窗口。需要注意的是,在闪烁期间,此窗口始终位于最上面,因此您将无法与底层窗口进行交互,因为该窗口将吞噬这些事件。另一种选择是像大多数其他Windows应用程序(如Outlook或Messenger)一样:显示一个简短的通知框,点击该框即可进入相关的应用程序(即您的程序)。
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern Int16 FlashWindowEx(ref FLASHWINFO pwfi);
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct FLASHWINFO {
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
public const UInt32 FLASHW_STOP = 0;
public const UInt32 FLASHW_CAPTION = 1;
public const UInt32 FLASHW_TRAY = 2;
public const UInt32 FLASHW_ALL = 3;
public void Flash() {
FLASHWINFO flashInfo = new FLASHWINFO();
flashInfo.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(flashInfo);
flashInfo.hwnd = this.Handle; // get the window handle
flashInfo.dwFlags = FLASHW_TIMERNOFG | FLASHW_ALL;
flashInfo.uCount = UInt32.MaxValue;
flashInfo.dwTimeout = 0;
FlashWindowEx(ref flashInfo);
}
FLASHWINFO.hwnd
的窗口句柄(在上面设置为this.Handle
)。 - reformed我认为你不能在WPF中技术上闪烁屏幕。也许可以使用Win32函数。但是,是否有可能截取屏幕并显示一个窗口,该窗口显示修改版本的截图?此窗口必须声明为TopMost并覆盖您的屏幕,您的图像可以通过增加透明通道来进行修改。
编辑:好的,我想我误解了“闪烁”。如果您只想显示一个带有一种颜色的闪烁矩形,请查看Mamta Dalal发布的线程。