2013-11-20 91 views
0

我希望为使用C#服务的Windows 7设置壁纸。 当服务作为控制台应用程序运行时,此工作正常。但在安装服务并启动它之后,它不会在 壁纸之间切换,然后 。任何人有一个想法如何设置窗口 服务内的壁纸?如何更改壁纸使用服务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在metod onStart只是为了确保代码工作,但在我启动服务时,它不会改变壁纸 我实际上使用计时器来改变壁纸每分钟, – user3012452

+0

好的。这是你的问题。您正在本地系统下运行该服务,并尝试从注册表访问HKEY_CURRENTUSER。 请尝试访问HKEY_USERS。它会给你一个你机器用户的SID列表。每个都有不同的控制面板和壁纸设置。 尝试找到您当前用户的SID并从那里更换壁纸。 –

+0

感谢很多Mr.Wasiq – user3012452