Как запустить заставку в Windows Form в качестве фона для этого? - PullRequest
1 голос
/ 15 ноября 2009

Как запустить фоновую заставку в Windows Form? Пользователь также может взаимодействовать с элементами управления формой во время работы заставки.

[Почему это?] У нас есть случай, когда нам нужно запустить заставку Windows Bubbles, пока пользователь можно продолжить взаимодействие с элементами управления формы?

1 Ответ

2 голосов
/ 15 ноября 2009

Вы можете использовать следующий код:

    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);

Параметр - это форма или элемент управления, в котором вы хотите отобразить предварительный просмотр заставки. Обратите внимание, что заставка ненадолго появится в полноэкранном режиме, прежде чем она будет изменена.

...