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

下面用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. Ubuntu中VMware tools的安装步骤

    按照下面的步骤,轻松解决!! 1.点击导航栏中的虚拟机,下面的安装VMware tools 2.点击桌面上的光盘,进入后,将tar.gz文件复制到桌面,然后右击提取到此处: 3.在桌面打开终端,cd到 ...

  2. Redis面试题集锦(精选)

    1.什么是 Redis?简述它的优缺点? Redis的全称是:Remote Dictionary.Server,本质上是一个Key-Value 类型的内存数据库,很像memcached,整个数据库统统 ...

  3. Centos7 U盘安装

    以下内容来自 https://www.cnblogs.com/Hello-java/p/8628917.html 和 https://blog.csdn.net/fiiber/article/deta ...

  4. vue如何新建一个项目

    第一步:安装node 首先下载安装node 安装步骤参考:https://www.cnblogs.com/qdwz/p/10820554.html window+R打开控制命令行cmd node -v ...

  5. ubuntu1804自带的vim和vi都是用什么版本?

    之前搜索vim一些命令时,经常看到有人说ubuntu自带的vim是是vim.tiny的,功能不全. 什么需要先卸载,再重装,真的是这样吗? 我查了一下,vim的版本号 vim --version vi ...

  6. django 知识点小结

    以下内容为用django写blog中的一些知识点,权当复习. 一.定义view 1.get_object_or_404()是用get()查询数据,如果不存在就直接返回404 参数: get_objec ...

  7. ASP.NETMVC中js非空验证实例

    页面代码 @using (Html.BeginForm("Edit", "Home", FormMethod.Post, new { @Id = "f ...

  8. TLS/SSL 梳理

    数据加密通篇都是为了防止第三方的劫持伪造,保证连接安全, 毫无遮掩的明文传输只有民风淳朴的时候才是安全的. 先是一些基础的内容: 对称加密 最开始为了对数据进行加密,使用的是对称加密算法,即双方协商好 ...

  9. 数据结构 - ArrayList

    简介 ArrayList是一个动态数组.ArrayList几乎拥有数组所有优点,例如元素有序,索引访问等:并且一般情况下它还不会越界,添加元素时它能动态扩容.平时工作中ArrayList被我们广泛应用 ...

  10. Flutter Weekly Issue 47

    教程 开辟 Dart 到 Native 的超级通道,饿了么跨平台的最佳实践 当永恒的软键盘问题遇到Flutter 插件 fijkplayer ijkplayer for flutter. ijkpla ...