Вы можете использовать следующий код:
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
Я использую Panel в качестве контроля для предварительного просмотра экранной заставки. – Ahmed
Это не тот элемент управления, который нужно изменить, только окно, в котором работает заставка. Если вы используете панель, просто передайте ее в качестве аргумента метода. Я использую этот код, и он отлично работает (в Windows 7) –