2011-12-05 40 views
5

Tôi muốn thay đổi Trình bảo vệ màn hình hiện tại cho một trình tùy chỉnh (mà trước đây tôi đã tải dưới dạng tài nguyên trong Visual Studio) bằng C#. Làm thế nào có thể được thực hiện? Tôi đã tìm nó trên Google và SO, nhưng tất cả đều nói về "Cách tạo một Trình bảo vệ màn hình" chứ không phải "Cách thay đổi Trình bảo vệ màn hình". Nếu có thể, nó sẽ hoạt động trên WinXP, Vista và 7.Làm cách nào để thay đổi trình bảo vệ màn hình theo chương trình?

+0

Điều này có thể hữu ích: http://bytes.com/topic/c-sharp/answers/263953-setting-up-screensaver-via-csharp-c-application Bạn cần thực hiện qua đăng ký –

+0

Cảm ơn bạn đã liên kết. Điều đó đã giảm bớt các bước. Tuy nhiên, nó không hoạt động cho Windows XP (trong Win7 nó hoạt động như một sự quyến rũ). Bạn có biết gì về điều đó không? – Korcholis

Trả lời

4

Tôi sẽ trả lời câu hỏi của tôi với đoạn mã mà làm việc để tôi:

public sealed class Screensaver 
{ 
    Screensaver() { } 

    const int SPI_SETSCREENSAVEACTIVE = 0x0011; 

    [DllImport("user32", CharSet=CharSet.Auto)] 
    unsafe public static extern short SystemParametersInfo (int uiAction, int uiParam, int* pvParam, int fWinIni); 

    public static void Set(string path) 
    { 
     try 
     { 
      RegistryKey oKey = Registry.CurrentUser.OpenSubKey("Control Panel", 
      true); 
      oKey = oKey.OpenSubKey("desktop", true); 
      oKey.SetValue("SCRNSAVE.EXE", path); 
      oKey.SetValue("ScreenSaveActive", "1"); 

      unsafe 
      { 
       int nX = 1; 
       SystemParametersInfo(
       SPI_SETSCREENSAVEACTIVE, 
       0, 
       &nX, 
       0 
       ); 
      } 
     } 
     catch (Exception exc) 
     { 
      System.Windows.Forms.MessageBox.Show(exc.ToString()); 
     } 
    } 
} 

Sau đó, khi gọi nó từ ứng dụng của tôi:

static string ResourcePath(string resource) 
{ 
    return Application.StartupPath + "\\Resources\\" + resource; 
} 

Program.Screensaver.Set(Program.ResourcePath("svr1.scr")); 

tôi đọc ở đâu Tôi nên viết tên không quá 8 ký tự (một chút lạ, nhưng XP giống như thế này), vì vậy trình bảo vệ màn hình của tôi được gọi là svr1.scr (không thực sự hướng đối tượng, nhưng mẹo)

+1

Xấu xí, nhưng tôi không thể tìm ra giải pháp tốt hơn. 'InstallScreenSaver' trong' desk.cpl' hiển thị giao diện người dùng bảng điều khiển sau đó, và 'SystemParametersInfo' dường như không để lộ tính năng đó. – CodesInChaos

0

Đây là lệnh rằng cửa sổ thực hiện khi cài đặt một cái mới

rundll32.exe desk.cpl,InstallScreenSaver %l 
Các vấn đề liên quan