2009-11-15 88 views

回答

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 2009-11-15 14:28:23

+0

我使用面板作爲控制預覽屏幕保護程序。 – Ahmed 2009-11-15 14:29:55

+0

這不是需要調整大小的控件,而只是屏幕保護程序運行的窗口。如果您使用面板,只需將面板作爲方法參數傳遞即可。我正在使用這段代碼,它工作正常(在Windows 7上) – 2009-11-15 14:33:32

相關問題