2009-11-15 2 views
1

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

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

ответ

2

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

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

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

+0

Заставка загружена успешно, но coontrol не изменяется, а экранная заставка продолжает работать в полноэкранном режиме. – Ahmed

+0

Я использую Panel в качестве контроля для предварительного просмотра экранной заставки. – Ahmed

+0

Это не тот элемент управления, который нужно изменить, только окно, в котором работает заставка. Если вы используете панель, просто передайте ее в качестве аргумента метода. Я использую этот код, и он отлично работает (в Windows 7) –