如何用代码将图片设为桌面背景

将图片设为桌面背景可以通过修改注册表来实现,但是使用注册表后必须重新启动计算机才能生效,所以最好选择调用系统API来实现这个功能。

使用系统API的代码如下:

	#region 调用API
        //引入user32.dll
        [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
        //声明SystemParametersInfo方法
        static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, string lpvparam, Int32 fuwinIni);
        //声明常量SPI_SETDESKWALLPAPER
        private const int SPI_SETDESKWALLPAPER = 20;
        #endregion
注意:在使用系统API时,由于API是非托管的,所以一定要引入
using System.Runtime.InteropServices;
命名空间,然后将API引入当前环境中,这样才可以声明API中的方法。

引入“user32.dll”,声明SystemParametersInfo函数之后,获取图片的绝对路径,然后将路径作为参数传递到SystemParametersInfo函数中,就可以将图片设为桌面背景了。

string fullName = "image001.jpg";        //图片的全名
string exName = fullName.Substring(fullName.LastIndexOf('.') + 1).ToLower();  //图片的扩展名
string fullPath;  //要设置为背景的原始图片的全路径
fullPath = pPath + fullName;        (注:pPath为图片所在文件夹的路径,如:E:\\图片 或 E:\\)
if (pPath.Length != 4)           //如果路径不是根目录,就要在中间加“\\”
{
    fullPath = pPath + "\\" + fullName;
}         
if (exName == "bmp")    //如果图片的类型是bmp,则调用API中的方法将其设置为桌面背景
{               
    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, fullPath, 1);
}
else          //如果图片的类型不是bmp,则要先创建一个bmp格式的图像
{
    string fileName = fullName.Substring(0,fullName.LastIndexOf('.'));   //获取图片名称,不带扩展名
    string SystemPath = Environment.SystemDirectory;    //获取系统路径
    string newPath = SystemPath + "\\" + fileName + ".bmp";   //设置背景图片的系统文件路径
    FileInfo fi = new FileInfo(newPath);    //以这张图片的系统路径创建一个FileInfo的对象
    if (fi.Exists)    //检查newPath这个路径上是否有个指定为fileName的bmp类型的图片
    {
        fi.Delete();      //如果有这样一个图片,就把它删除    
        PictureBox pb = new PictureBox();
        pb.Image = Image.FromFile(fullPath);     //以指定的原始图片的路径来创建一个新的PictureBox里面的Image对象
        pb.Image.Save(newPath, ImageFormat.Bmp);  //把这张新建的bmp类型的图片保存在系统文件路径里面
    }
    else          //如果指定的图片文件不存在
    {
        PictureBox pb = new PictureBox();
        pb.Image = Image.FromFile(fullPath);
        pb.Image.Save(newPath, ImageFormat.Bmp);
    }
    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, newPath, 1);   //调用SystemParametersInfo函数将指定的图片设为桌面背景
}



你可能感兴趣的:(学习笔记——.Net)