2011-12-05 17 views
5

Geçerli Screensaver'ı C# kullanarak özel bir (Visual Studio'da daha önce bir kaynak olarak yüklediğim) için değiştirmek istiyorum. Bu nasıl yapılabilir? Bunu Google ve SO’da aradım, ancak "Ekran Koruyucu’nı nasıl değiştirebilirim" değil, "Ekran Koruyucusu Nasıl Oluşturulur" den bahseder. Mümkünse, bu WinXP, Vista çalışması gerekir ve 7.Ekran koruyucuyu programatik olarak nasıl değiştirebilirim?

+0

Bu kullanışlı olabilir: http://bytes.com/topic/c-sharp/answers/263953-setting-up-screensaver-via-csharp-c-application Kayıt defterinden –

+0

yapmalısınız. Bağlantınız için teşekkürler. Bu adımları kolaylaştırdı. Ancak, Windows XP için çalışmıyor (Win7'de bir çekicilik gibi çalışır). Bunun hakkında bir şey biliyor musun? – Korcholis

cevap

4

yeni benim uygulamadan çağrılırken

Sonra
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()); 
     } 
    } 
} 

,: beni

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

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

yerde okudum 8 karakterden daha uzun olmayan bir isim yazmalıyım (biraz garip, ama XP bunun gibi), bu yüzden ekran koruyucum svr1.scr (gerçekten nesne yönelimli değil, hile yapıyor) olarak adlandırılıyor

+1

Çirkin, ama daha iyi bir çözüm bulamıyorum. 'Desk.cpl' içinde InstallScreenSaver ', kontrol paneli kullanıcı arayüzünü daha sonra gösterir ve' SystemParametersInfo', bu özelliği göstermez. – CodesInChaos

0

Bu yüklerken pencereler yürütür komuttur bir ben çalıştı kod parçası ile soruma cevap olacak bir

rundll32.exe desk.cpl,InstallScreenSaver %l 
İlgili konular