必应每天都会更换背景图片,都非常漂亮,有的时候还十分惊艳,同时还会根据每个地区的特色不同应用不同的图片。

下面用c#抓取必应每天的背景图片,并实现桌面壁纸的每天自动切换

实现思路

  • 1.通过获取“必应”网页背景图片URL
  • 2.下载图片到本地
  • 3.设置这个图片为壁纸
  • 4.每日自动切换壁纸

1.创建项目文件

使用Windows 窗体应用程序可以不用像控制台应用程序一样弹出黑框

  • 1.先创建 Windows 窗体应用
  • 2.删除窗体文件【这样不会有任何东西弹出】

  • 3.将Program.cs的Main方法中之前的代码删除

  • 4.在Main方法中添加引用
using System;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Windows.Forms;

2.通过获取“必应”网页背景图片URL

我们需要先下载得到“必应”这个网页文件,然后找到他的背景图片URL,并提取出来,这里我就需要使用WebClient对象实现下载网页文件的操作,需要使用Regex对象实现提取出背景图片URL操作

这个就是“必应”网页背景图片URL



下载网页文件并提取图片URL代码

/// <summary>
/// 获取必应图片
/// </summary>
/// <returns>必应图片URL</returns>
private static string GetBingImageUrl()
{
using (var client = new WebClient())
{
//设置下载的HTML文件的编码为UTF-8
client.Encoding = Encoding.UTF8;
//下载必应中国的首页HTML文件
var html = client.DownloadString("https://cn.bing.com/");
//使用正则得到背景图片地址
var match = Regex.Match(html, "id=\"bgLink\".*?href=\"(.+?)\"");
//得到背景图片URL
return string.Format("https://cn.bing.com{0}", match.Groups[1].Value);
}
}

3.下载图片到本地

我们使用 WebClient 对象来进行下载图片文件操作,然后使用Path对象来获取系统临时文件路径,和拼接出保存图片文件的路径

/// <summary>
/// 下载图片并存储到临时文件夹下
/// </summary>
/// <param name="url">图片URL</param>
/// <returns>保存下载图片文件的路径</returns>
private static string DownloadImageAndSaveFile(string url)
{
using (var client = new WebClient())
{
//创建临时文件目录下的存储必应图片的绝对路径
var filePath = Path.Combine(Path.GetTempPath(), "bing.jpg");
//将图片下载到这个路径下
client.DownloadFile(url, filePath);
//返回当前图片路径
return filePath;
}
}

4.设置这个图片为壁纸

使用Windows系统函数

/// <summary>
/// Windows系统函数
/// </summary>
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
public static extern int SystemParametersInfo(
int uAction,
int uParam,
string lpvParam,
int fuWinIni
);

设置壁纸操作

//设置壁纸
SystemParametersInfo(20, 0, filePath, 2);

运行效果

5.每日自动切换壁纸

方案一、设置程序自启动

/// <summary>
/// 向注册表注册开机自启
/// Win10需要使用系统管理员权限运行VS才能调试,同理启动这个程序也需要系统管理员权限运行
/// 这个只需要成功注册一次,后面就可以开机自动启动此程序了
/// </summary>
public static void SetExecSelfStarting()
{
try
{
var execPath = Application.ExecutablePath; //当前程序路径
using (var rk = Registry.LocalMachine)
{
var resigetryPath = Environment.Is64BitOperatingSystem //判断是否为64位系统
? "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run"
: "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
using (var rk2 = rk.CreateSubKey(resigetryPath))
{
if (rk2 == null) return;
var value = rk2.GetValue("AutomaticWallpaperChange") ?? string.Empty;
if (execPath.Equals(value.ToString(), StringComparison.OrdinalIgnoreCase)) return;
rk2.SetValue("AutomaticWallpaperChange", execPath);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}

方案二、设置Windows的 任务计划程序

  • 1.打开Windows的 任务计划程序
  • 2.创建 定时任务
  • 3.设置每天 9点启动 更换成“必应”背景图片为壁纸的程序













6.获取源码 链接

下载源码: https://github.com/liu-zhen-liang/AutomaticallyChangeBingWallpaper.

用c#每日更换“必应背景图片”为“桌面壁纸”的更多相关文章

  1. Python实用案例,Python脚本,Python实现每日更换“必应图片”为“桌面壁纸”

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 前言: 今天我们就利用python脚本实现每日更换"必应图片& ...

  2. 初学ToggleButton 点击button,更换button背景图片;再次点击,恢复之前背景图

    上方的图标,R.drawable.register_checked  是选中图片 下方的图标,   R.drawable.register_unchecked 是未选中图片 默认是上方的选中效果.点击 ...

  3. idea 更换编辑器背景图片

    插件名称是:BackgroundImage, 安装后效果图

  4. Android 如何更换屏幕上锁界面背景图片

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  5. WPF 渐隐渐现切换背景图片

    最近学习WPF,尝试着自己做一些小玩意,也遇到了一些问题,于是整理记录以便日后查阅. 我们都知道WPF可以实现一些很炫的效果,然而有时候为达到这个目的却并不是一件很容易的事情.比如:在软件中我希望能够 ...

  6. Qt 设置背景图片3种方法(QPalette可以做无数的事情,一旦控件指定了调色板,就要乖乖听它的话;QPainter当场绘制当然也没有问题,还有就是QSS)

    方法1. setStylSheet{"QDialog{background-image:url()"}}  //使用styleSheet 这种方法的好处是继承它的dialog都会自 ...

  7. 将Chrome插件Momentum背景图片设为桌面壁纸

    Momentum简介 Momentum插件是一款自动更换壁纸,自带时钟,任务日历和工作清单的chrome浏览器插件.官方的解释就是:替换你 Chrome 浏览器默认的“标签页”.里面的图片全部来自50 ...

  8. js 定时更改div背景图片

    今天遇到一个业务场景,使用js将一个div标签的背景图片定时更换一下. 之前百度了几个,有css+js,也有css3的,不过css3的兼容有问题,之后同事提示,可以使用js直接来更换div的北京图片, ...

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

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

随机推荐

  1. 前端每日实战:17# 视频演示如何用纯 CSS 创作炫酷的同心矩形旋转动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/bMvbRp 可交互视频教程 此视频 ...

  2. psql的时间类型,通过时间查询

    psql的时间类型,通过时间查询 psql有date/timestamp类型,date只显示年月日1999-01-08,而timestamp显示年月日时分秒 1999-01-08 09:54:03.2 ...

  3. 量子计算机编程(二)——QPU基础函数

    第二部分主要是QPU的基础功能,第一部分就像是我们有了哪些基本的语句,第二部分就是我们能写一些简单基础的函数,一些小模块,第三部分就是他的应用了. 先来看一下一个简单量子应用的结构: 第一步,将量子态 ...

  4. 智慧港口——基于二三维一体化GIS的港口可视化监管平台

    “智慧港口”是以现代化基础设施设备为基础,以云计算.大数据.物联网.移动互联网.智能控制等新一代信息技术与港口运输业务深度融合为核心,以港口运输组织服务创新为动力,以完善的体制机制.法律法规.标准规范 ...

  5. 2019年高校微信小程序开发大赛学习笔记

    学做小程序(学堂在线笔记)一.传统布局 text-align:center //水平居中 margin-bottom: 60px //设置间距 二.弹性盒子布局 display:flex; flex- ...

  6. 深入理解React key

    一 react 组件元素的 diff 算法 二 key 的理解 概述 react 中的key 属性,它是一个特殊的属性,它的出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key ...

  7. Redis05——Redis Cluster 如何实现分布式集群

    前面一片文章,我们已经说了Redis的主从集群及其哨兵模式.本文将继续介绍Redis的分布式集群. 在高并发场景下,单个Redis实例往往不能满足业务需求.单个Redis数据量过大会导致RDB文件过大 ...

  8. C#窗体排列方式

    2020-03-11 每日一例第3天 1.设置父窗体属性:IsMdicontainer设置成true; 2.拖入menustrip控件,修改标题栏中的text文字. 3.点击“加载子窗体”设置代码: ...

  9. mimtproxy的使用(windows)

    1.安装 pip3 install mitmproxy 或者下载安装指定版本:https://mitmproxy.org/downloads/ 2.配置证书 对于mitmproxy来说,如果想要截获H ...

  10. Java多线程详解(转载)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用 ...