2013-11-20 2 views
0

Я хочу установить обои для Windows 7 с помощью службы C#. Это нормально работает, когда служба запускается как консольное приложение. Но после установки услуги и запуска ее, тогда она не переключается между обоями. У кого-нибудь есть идея установить обои в окне сервис?Как сменить обои с помощью сервиса C#

Вот мой код:

private String file = @"C://Users//Alvin//Pictures//onepiece.jpg"; 

/// <summary> 
/// Set things in motion so your service can do its work. 
/// </summary> 
protected override void OnStart(string[] args) 
{ 
    SetWallpaper(file, 0); 
} 

private void SetWallpaper(string WallpaperLocation, int WallpaperStyle) 
{ 
    try 
    { 
     // Sets the actual wallpaper 
     SystemParametersInfo(20, 0, "@" + WallpaperLocation, 0x01 | 0x02); 
     // Set the wallpaper style to streched (can be changed to tile, center, maintain aspect ratio, etc. 
     RegistryKey rkWallPaper = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true); 
     // Sets the wallpaper style 

     switch (walpaperStyle) 
     { 
      case 0: 
       rkWallPaper.SetValue(@"WallpaperStyle", "0"); 
       rkWallPaper.SetValue(@"TileWallpaper", "1"); 
       break; 
      case 1: 
       rkWallPaper.SetValue(@"WallpaperStyle", "0"); 
       rkWallPaper.SetValue(@"TileWallpaper", "0"); 
       break; 
      case 2: 
       rkWallPaper.SetValue(@"WallpaperStyle", "2"); 
       rkWallPaper.SetValue(@"TileWallpaper", "0"); 
       break; 
      case 3: // (Windows 7 and later) 
       rkWallPaper.SetValue(@"WallpaperStyle", "6"); 
       rkWallPaper.SetValue(@"TileWallpaper", "0"); 
       break; 
      case 4: // (Windows 7 and later) 
       rkWallPaper.SetValue(@"WallpaperStyle", "10"); 
       rkWallPaper.SetValue(@"TileWallpaper", "0"); 
       break; 
     } 

     rkWallPaper.Close(); 
     cetakService("sukses set walpaper"); 
    } 
    catch (Exception e) 
    { 
     cetakService("Error "+e.Message.ToString()); 
    } 
} 
+0

Вы пытались сменить пользователя, который служба запускается временно на учетную запись администратора, чтобы быть уверенным, что это проблема с вашим кодом, а не с разрешениями? – JMK

+0

Я изменил свой сервис на локальную системную учетную запись, но не работает – user3012452

+0

Как насчет фактической учетной записи, с которой вы работаете в Windows? – JMK

ответ

1

Если вы хотите, чтобы переключить обои время от времени, пожалуйста, обратите внимание, что OnStart() запускается один раз, при запуске службы. Я не вижу, как вы меняете обои через SetWallpaper. Он фактически запускается один раз и устанавливает обои. Никакая логика не используется, чтобы постоянно менять обои для разных случаев, которые нужно выполнить. Этот код должен менять обои при первом запуске службы, если это то, что вы хотите сделать, убедитесь, что ваш сервис имеет достаточные права доступа к значениям реестра.

+0

Спасибо за ваш ответ: Я положил setWallpaper в методе onStart, чтобы убедиться, что код работает, но в то время, когда я запускаю сервис, он не меняет обои я фактически использую таймер для изменения обои каждые минуты, – user3012452

+0

Хорошо. Вот ваша проблема. Вы запускаете службу в локальной системе и пытаетесь получить доступ к HKEY_CURRENTUSER из реестра. Вместо этого попробуйте получить доступ к HKEY_USERS. Он предоставит вам список SID пользователей вашей машины. У каждого есть разные настройки панели управления и обои. Попробуйте найти SID текущего пользователя и измените обои оттуда. –

+0

спасибо большое Mr.Wasiq – user3012452