使用 C# 实现Windows桌面壁纸软件

一、设置Windows壁纸

将电脑上的图片设置为壁纸,代码如下:

csharp 复制代码
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
const int SPI_SETDESKWALLPAPER = 20;
const int SPIF_UPDATEINIFILE = 0x1;

public void SetWallpaper(string path)
{
    try
    {
        if (!File.Exists(path))
        {
            return;
        }
        FileLogger.Info($"set wallpaper: {path}");
        SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path, SPIF_UPDATEINIFILE);
    }
    catch (Exception ex)
    {
        FileLogger.Error(ex.ToString());
    }
}

二、随机给windows设置一张壁纸

这里推荐一个接口,可以获取到Bing壁纸:

复制代码
https://api.vvhan.com/api/bing?type=json //获取今日壁纸
https://api.vvhan.com/api/bing?type=json&rand=sj //获取随机壁纸

返回结果如下:

复制代码
{
  "success": true,
  "data": {
    "date": 20240623,
    "title": "达卡环形交叉路口的鸟瞰图,孟加拉国 (© Azim Khan Ronnie/Amazing Aerial Agency)",
    "url": "https://cn.bing.com/th?id=OHR.DhakaBangladesh_ZH-CN6777866162_1920x1080.jpg"
  }
}

之后将图片下载下来,使用上文中的方法就可以实现随机设置一张壁纸的功能了

从URL下载图片的方法如下:

csharp 复制代码
public bool SavePhotoFromUrl(string fileName, string url)
{
    bool value = false;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        WebResponse response = request.GetResponse();
        Stream stream = response.GetResponseStream();
        if (!response.ContentType.ToLower().StartsWith("text/"))
        {
            value = SaveBinaryFile(response, fileName);
        }
    }
    catch (Exception err)
    {
        FileLogger.Error(err.ToString());
    }
    return value;
}
private bool SaveBinaryFile(WebResponse response, string FileName)
{
    bool Value = true;
    byte[] buffer = new byte[1024];

    try
    {
        if (File.Exists(FileName))
            File.Delete(FileName);
        Stream outStream = System.IO.File.Create(FileName);
        Stream inStream = response.GetResponseStream();

        int l;
        do
        {
            l = inStream.Read(buffer, 0, buffer.Length);
            if (l > 0)
                outStream.Write(buffer, 0, l);
        }
        while (l > 0);

        outStream.Close();
        inStream.Close();
    }
    catch
    {
        Value = false;
    }
    return Value;
}

我自己开发了一个随机壁纸小软件,免费无毒无广,欢迎下载使用

相关推荐
喜欢吃燃面3 分钟前
Linux 进程信号深度解析:从概念到产生机制
linux·开发语言·学习
AI玫瑰助手4 分钟前
Python基础:字符串的常用内置方法(查找替换分割)
android·开发语言·python
Foreer黑爷12 分钟前
Java并发工具箱:CountDownLatch与CyclicBarrier使用指南
java·开发语言·jvm
syker17 分钟前
AIFerric v2.0 项目总结报告
c语言·开发语言·c++
周杰伦fans29 分钟前
C# CAD二次开发:RotatedDimension 文字边框设置完全指南
开发语言·c#
蚰蜒螟40 分钟前
从 pthread_create 到 thread_native_entry:glibc 如何唤醒 Java 线程
java·开发语言
We་ct43 分钟前
LeetCode 300. 最长递增子序列:两种解法从入门到优化
开发语言·前端·javascript·算法·leetcode·typescript
gCode Teacher 格码致知44 分钟前
Python提高: unittest和 pytest的使用方法-由Deepseek产生
开发语言·python·pytest
Johnstons1 小时前
网络可观测性落地指南:从“出了问题才排查“到“实时感知全网状态“
开发语言·网络·php
uNke DEPH1 小时前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis