使用的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#的更多相关文章

  1. Mac 更换桌面背景崩溃(闪退)

    更新完系统后就会出现这种情况,,其实就是用户偏好文件出了问题. 1. 在终端输入 cd /Users/YourUserName/Library/Preferences //进入文件夹 rm com.a ...

  2. Win10家庭版设置桌面右键更换桌面壁纸

    Win10家庭版设置桌面右键更换桌面壁纸.. ------------------------- 这是设置之前的右键快捷菜单.. ------------------------- 开始设置:右键桌面 ...

  3. windows 桌面背景设置实例

    应用SystemParametersInfo函数可以获取和设置数量众多的windows系统参数.这个小程序就是运用了SystemParametersInfo函数来设置桌面的墙纸背景,而且程序可以让我们 ...

  4. 找回误删除的UBUNTU16.04桌面壁纸图片,或把桌面背景图片另存。20170114

    今天遇到一个小问题,之前下载并设置为桌面壁纸的一张图片在整理文件的时候不小心删除了.由于想不起来当时从哪里找到的图,所以就想把当前桌面壁纸重新保存.经网上查询,未见正确的保存方法,故写在此处备忘. 1 ...

  5. 如何找出当前活动桌面背景图像的位置/路径(Ubuntu 18.04,GNOME)?

    启动终端并运行以下命令 $ gsettings get org.gnome.desktop.background picture-uri 显示当前设置为桌面背景图片的完整路径.  

  6. Python3实现Win10桌面背景自动切换

    [本文出自天外归云的博客园] 得空写了个自动切换桌面背景图片的小程序.再不写python就要扔键盘了,对vue还有那么一点好感,天天php真是有够烦. 准备工作 准备个文件夹放在桌面上,平时看到什么高 ...

  7. 清除win7桌面背景的图片位置下拉菜单的历史记录

    到注册表 清除win7桌面背景的图片位置下拉菜单的历史记录: 开始--->运行--->输入regedit,在弹出的注册表编辑器中,定位到如下位置 HKEY_CURRENT_USER\Sof ...

  8. win10更换登陆背景和关闭锁屏

    更换登陆背景图 用国外一个hacker写的工具,可在github上下载,或者下载我上传到百度网盘的备份.win10默认的登陆背景太难看了. 去掉锁屏图片 登陆界面其实本身就是一种锁屏,为什么还要单独搞 ...

  9. 利用API设置桌面背景

    实现效果: 知识运用: API函数SystemParametersInfo 实现代码: [DllImport("user32.dll", EntryPoint = "Sy ...

随机推荐

  1. C++中对类的提前引用声明注意事项

    //或许,友元是VC++6.0心里永远的痛,对于这个BUG我一直很介意.//注:这个程序在VC++6.0里是行不通的,在VS2008里是可以的.#include <iostream> #i ...

  2. vim的tab缩进及用空格设置

    编辑~/.vimrc文件,分别设置用空格而不是用tab,一个tab多少个空格,自动缩进多少宽度,显示行号. set expandtabset tabstop=4 set shiftwidth=4 se ...

  3. nginx开发_字符串操作函数

    由于ngx_str_t为非NULL结尾的函数,且网络请求中有大量忽略大小写的需求,所以nginx内部封装了许多字符串操作相关的函数,函数名称极其相识,且使用时有有些约定,特此整理. 赋值&拷贝 ...

  4. ceph之ceph-client安装

    1.安装ceph-client ceph-deploy install ceph-client 2.创建块设备 [root@mon1 ~]# rbd create test1 --image-form ...

  5. web.xml中load-on-startup的作用,web应用写一个InitServlet,这个servlet配置为启动时装载

    如下一段配置,熟悉DWR的再熟悉不过了:<servlet>   <servlet-name>dwr-invoker</servlet-name>   <ser ...

  6. idea2018.2.5版本使用之背景色

    idea 背景色: 写代码区换眼色豆沙色:

  7. 1.5 Hive初步使用和安装MySQL

    一.HQL初步试用 1.创建一个student表 #创建一个student表 hive> create table student(id int, name string) ROW FORMAT ...

  8. c++中IO输入输出流总结<二>

    1 文件的打开和关闭 1.1 定义流对象 ifsteam iflie;//文件输入流对象 ifsteam iflie;//文件输出流对象 fsteam iflie;//文件输入输出流对象 1.2 打开 ...

  9. TypeScript完全解读(26课时)_11.TypeScript完全解读-类型推论和兼容性

    11.TypeScript完全解读-类型推论和兼容性 在一些时候省略指令,ts会帮我们推断出省略的类型的地方适合的类型,通过学习ts的类型推论了解ts的推论规则 类型兼容性就是为了适应js灵活的特点, ...

  10. LeetCode: 448 Find All Numbers Disappeared in an Array(easy)

    题目: Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice an ...