C# 如何使用服务c更改墙纸#
我希望使用C#服务为Windows 7设置墙纸。 当服务作为一个控制台应用程序运行时,这可以正常工作。但是 安装并启动服务后,它不会在 墙纸。有人知道怎么把墙纸放在窗户里吗 服务 这是我的密码:C# 如何使用服务c更改墙纸#,c#,service,wallpaper,C#,Service,Wallpaper,我希望使用C#服务为Windows 7设置墙纸。 当服务作为一个控制台应用程序运行时,这可以正常工作。但是 安装并启动服务后,它不会在 墙纸。有人知道怎么把墙纸放在窗户里吗 服务 这是我的密码: private String file = @"C://Users//Alvin//Pictures//onepiece.jpg"; /// <summary> /// Set things in motion so your service can do its work. /// &l
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());
}
}
private String file=@“C://Users//Alvin//Pictures//onepiece.jpg”;
///
///启动工作,使您的服务能够完成其工作。
///
启动时受保护的覆盖无效(字符串[]args)
{
设置墙纸(文件,0);
}
私有void SetWallpaper(字符串墙纸位置,int墙纸样式)
{
尝试
{
//设置实际的壁纸
系统参数信息(20,0,“@”+位置,0x01 | 0x02);
//将墙纸样式设置为Stretched(可以更改为平铺、居中、保持纵横比等)。
RegistryKey rkWallPaper=Registry.CurrentUser.OpenSubKey(“控制面板\\桌面”,true);
//设置墙纸样式
开关(walpaperStyle)
{
案例0:
rkWallPaper.SetValue(@“WallperStyle”,“0”);
rkWallPaper.SetValue(@“瓷砖壁纸”,“1”);
打破
案例1:
rkWallPaper.SetValue(@“WallperStyle”,“0”);
rkWallPaper.SetValue(@“瓷砖壁纸”,“0”);
打破
案例2:
rkWallPaper.SetValue(@“墙纸样式”,“2”);
rkWallPaper.SetValue(@“瓷砖壁纸”,“0”);
打破
案例3://(Windows 7及更高版本)
rkWallPaper.SetValue(@“墙纸样式”,“6”);
rkWallPaper.SetValue(@“瓷砖壁纸”,“0”);
打破
案例4://(Windows 7及更高版本)
rkWallPaper.SetValue(@“墙纸样式”,“10”);
rkWallPaper.SetValue(@“瓷砖壁纸”,“0”);
打破
}
rkWallPaper.Close();
cetakService(“sukses set walpaper”);
}
捕获(例外e)
{
cetakService(“错误”+e.Message.ToString());
}
}
如果您希望不时切换墙纸,请注意,OnStart()在服务启动时运行一次。我看不出您是如何通过SetWallpaper更改墙纸的。它实际上运行一次并设置墙纸。对于要执行的不同情况,没有实现不断更改墙纸的逻辑。
此代码应在服务第一次启动时更改墙纸,如果您希望这样做,请确保您的服务有足够的权限访问注册表值。您是否尝试将服务运行的用户临时更改为管理员帐户,以确保这是您的代码问题,而不是权限问题?我有c将我的服务更改为本地系统帐户,但不起作用您使用Windows的实际帐户如何?它仍然不起作用谢谢您的回答:我在metod onStart中放置setWallpaper只是为了确保代码正常工作,但在我启动服务时,它不会更改墙纸我实际上使用计时器更改墙纸y分钟,好的。这是您的问题。您正在本地系统下运行服务,并试图从注册表访问HKEY_CURRENTUSER。请尝试访问HKEY_用户。它将为您提供计算机用户的SID列表。每个SID都有不同的控制面板和墙纸设置。请尝试查找当前用户的SID并更改设置墙纸。