1
如何在Windows窗體中運行屏幕保護程序作爲背景? 用戶還可以在屏幕保護程序運行時與窗體控件進行交互。如何在Windows窗體中運行屏幕保護程序作爲背景?
[爲什麼呢?] 我們有我們需要運行Windows泡泡屏保,同時用戶 可以繼續使用表單控件交互的情況下?
如何在Windows窗體中運行屏幕保護程序作爲背景? 用戶還可以在屏幕保護程序運行時與窗體控件進行交互。如何在Windows窗體中運行屏幕保護程序作爲背景?
[爲什麼呢?] 我們有我們需要運行Windows泡泡屏保,同時用戶 可以繼續使用表單控件交互的情況下?
您可以使用下面的代碼:
private void ShowScreenSaver(Control displayControl)
{
using (RegistryKey desktopKey = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop"))
{
if (desktopKey != null)
{
string screenSaverExe = desktopKey.GetValue("SCRNSAVE.EXE") as string;
if (!string.IsNullOrEmpty(screenSaverExe))
{
Process p = Process.Start(screenSaverExe, "/P " + displayControl.Handle);
p.WaitForInputIdle();
IntPtr hwnd = p.MainWindowHandle;
if (hwnd != IntPtr.Zero)
{
SetParent(hwnd, displayControl.Handle);
Rectangle r = displayControl.ClientRectangle;
MoveWindow(hwnd, r.Left, r.Top, r.Width, r.Height, true);
}
}
}
}
}
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hwndChild, IntPtr hwndParent);
[DllImport("user32.dll")]
static extern bool MoveWindow(IntPtr hwnd, int x, int y, int width, int height, bool repaint);
的參數是要顯示屏幕預覽的形式或控制。請注意,屏幕保護程序會在調整大小之前短暫地全屏顯示。
屏幕保護程序已成功加載,但coontrol未調整大小,屏幕保護程序將繼續以全屏模式運行。 – Ahmed 2009-11-15 14:28:23
我使用面板作爲控制預覽屏幕保護程序。 – Ahmed 2009-11-15 14:29:55
這不是需要調整大小的控件,而只是屏幕保護程序運行的窗口。如果您使用面板,只需將面板作爲方法參數傳遞即可。我正在使用這段代碼,它工作正常(在Windows 7上) – 2009-11-15 14:33:32