Windows7获取、更换桌面背景,C#
使用的API原型是 BOOL SystemParametersinfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni);
在C#中定义如下:
/// <summary>
/// 查询或设置系统级参数
/// </summary>
/// <param name="uAction"></param>
/// <param name="uParam"></param>
/// <param name="lpvParam"></param>
/// <param name="fuWinIni"></param>
/// <example></example>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
public static extern int SystemParametersInfo(UAction uAction, int uParam, StringBuilder lpvParam, int fuWinIni);
其中UAction类型的参数定义为:
public enum UAction
{
/// <summary>
/// 设置桌面背景图片
/// </summary>
SPI_SETDESKWALLPAPER = 0x0014,
/// <summary>
/// 获取桌面背景图片
/// </summary>
SPI_GETDESKWALLPAPER = 0x0073,
}
首先是获取桌面背景,调用方法:
public string GetBackgroud()
{
StringBuilder s = new StringBuilder();
APIHelper.SystemParametersInfo(UAction.SPI_GETDESKWALLPAPER, , s, );
return s.ToString();
}
再是设置桌面背景:
/// <summary>
/// 设置桌面背景
/// </summary>
/// <param name="fileName">图片绝对路径</param>
/// <returns></returns>
public int SetBackgroud(string fileName)
{
int result = ;
if (File.Exists(fileName))
{
StringBuilder s = new StringBuilder(fileName);
result = APIHelper.SystemParametersInfo(UAction.SPI_SETDESKWALLPAPER, , s, 0x2);
}
return result;
}
返回0表示设置失败,1表示成功。
以上内容网上都能搜到,
但是在使用过程中,发现通过上述的设置方法,虽然能改变桌面背景,但是右键桌面→个性化→桌面背景里的图片并没有改变。

查找资料后,才知道是注册表没有设置。
注册表:HKEY_CURRENT_USER\Control Panel\Desktop
修改里面Wallpaper的值为图片路径即可
相关设置注册表代码如下
/// <summary>
/// 设置注册表选项
/// </summary>
/// <param name="optionsName">注册表项名称</param>
/// <param name="optionsData">注册表项值</param>
/// <param name="msg"></param>
/// <returns></returns>
public static bool SetOptions(string optionsName, string optionsData, ref string msg)
{
bool returnBool = true;
RegistryKey classesRoot = Registry.CurrentUser;
RegistryKey registryKey = classesRoot.OpenSubKey(@"Control Panel\Desktop", true);
try
{
if (registryKey != null)
{
registryKey.SetValue(optionsName.ToUpper(), optionsData);
}
else
{
returnBool = false;
}
}
catch
{
returnBool = false;
msg = "读取注册表出现异常、";
}
finally
{
classesRoot.Close();
registryKey.Close();
}
return returnBool;
}
注:XP下更换背景只支持BMP格式,需要将jpg文件读取,转换成BMP格式,再设置。
Windows7获取、更换桌面背景,C#的更多相关文章
- Mac 更换桌面背景崩溃(闪退)
更新完系统后就会出现这种情况,,其实就是用户偏好文件出了问题. 1. 在终端输入 cd /Users/YourUserName/Library/Preferences //进入文件夹 rm com.a ...
- Win10家庭版设置桌面右键更换桌面壁纸
Win10家庭版设置桌面右键更换桌面壁纸.. ------------------------- 这是设置之前的右键快捷菜单.. ------------------------- 开始设置:右键桌面 ...
- windows 桌面背景设置实例
应用SystemParametersInfo函数可以获取和设置数量众多的windows系统参数.这个小程序就是运用了SystemParametersInfo函数来设置桌面的墙纸背景,而且程序可以让我们 ...
- 找回误删除的UBUNTU16.04桌面壁纸图片,或把桌面背景图片另存。20170114
今天遇到一个小问题,之前下载并设置为桌面壁纸的一张图片在整理文件的时候不小心删除了.由于想不起来当时从哪里找到的图,所以就想把当前桌面壁纸重新保存.经网上查询,未见正确的保存方法,故写在此处备忘. 1 ...
- 如何找出当前活动桌面背景图像的位置/路径(Ubuntu 18.04,GNOME)?
启动终端并运行以下命令 $ gsettings get org.gnome.desktop.background picture-uri 显示当前设置为桌面背景图片的完整路径.
- Python3实现Win10桌面背景自动切换
[本文出自天外归云的博客园] 得空写了个自动切换桌面背景图片的小程序.再不写python就要扔键盘了,对vue还有那么一点好感,天天php真是有够烦. 准备工作 准备个文件夹放在桌面上,平时看到什么高 ...
- 清除win7桌面背景的图片位置下拉菜单的历史记录
到注册表 清除win7桌面背景的图片位置下拉菜单的历史记录: 开始--->运行--->输入regedit,在弹出的注册表编辑器中,定位到如下位置 HKEY_CURRENT_USER\Sof ...
- win10更换登陆背景和关闭锁屏
更换登陆背景图 用国外一个hacker写的工具,可在github上下载,或者下载我上传到百度网盘的备份.win10默认的登陆背景太难看了. 去掉锁屏图片 登陆界面其实本身就是一种锁屏,为什么还要单独搞 ...
- 利用API设置桌面背景
实现效果: 知识运用: API函数SystemParametersInfo 实现代码: [DllImport("user32.dll", EntryPoint = "Sy ...
随机推荐
- 更换ubuntu apt-get源
原文地址:http://www.cnblogs.com/zhangpengshou/p/3591387.html 为了优化ubuntu软件安装/更新速度,我测试了国内几家apt源的速度,发现北京交大的 ...
- c/c++生成预编译文件
Preprocesses C and C++ source files and writes the preprocessed output to a file. /P Remarks The f ...
- BZOJ_1941_[Sdoi2010]Hide and Seek_KDtree
BZOJ_1941_[Sdoi2010]Hide and Seek_KDtree Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得 ...
- react之redux增加删除数字
比如在页面中添加和删除‘222’ action.js export const ADD= 'ADD'; export const RED='RED'; export const add=(str)=& ...
- .pdm文件怎么打开
1. 用PowerDesigner打开.pdm文件
- 在OpenCV for Android 2.4.5中使用SURF(nonfree module)
http://blog.csdn.net/ruifdu/article/details/9120559 在OpenCV4Android中没有nonfree module,因此也就没有了SURF和SIF ...
- shader实例(二十二)TexGen-球面贴图SphereMap
http://blog.sina.com.cn/s/blog_89d90b7c0102vfqz.html 球面贴图一般用于环境反射,如下图(左边为球面贴图,右边为正常贴图),一个镜面水晶球在这只猫的前 ...
- Unity3D asset bundle 格式简析
http://blog.codingnow.com/2014/08/unity3d_asset_bundle.html Unity3D 的 asset bundle 的格式并没有公开.但为了做更好的差 ...
- 一个高效的A-star寻路算法(八方向)(
这种写法比较垃圾,表现在每次搜索一个点要遍历整个地图那么大的数组,如果地图为256*256,每次搜索都要执行65535次,如果遍历多个点就是n*65535,速度上实在是太垃圾了 简单说下思路,以后补充 ...
- javaScript中for-in语句
for-in语句是一种精准的迭代语句,用来枚举对象的属性 实例: <!DOCTYPE html><html><head> <title>For-In S ...