Windows下C#设置桌面壁纸(并自动下载每日Bing美图)

本想将Bing网站上每天一换的美图写个程序自动下载后设置成桌面壁纸,遂有此文。

思路

因为要调用设置桌面背景的系统函数,因此选用C#实现。

步骤:

1. 获取http:\\\\cn.bing.com的文本;
2. 根据网页源代码找出背景图片的属性字段;
3. 解析网页文本,得出背景图片的URL地址;
4. 下载图片;
5. 设置背景;

部分代码

  • 下载URL地址文本及图片分别使用C#中的WebClient类中对应的DownloadString(), DownloadFile()方法。 自己写了个简单的WebHelper类中的方法:

      /// <summary>
      /// 获取指定网页内容
      /// </summary>
      /// <param name="url"></param>
      /// <returns></returns>
      public static string GetContent(string url)
      {
          string result = string.Empty;
          try
          {
              if (string.IsNullOrEmpty(url)) return result;
              using (WebClient client = new WebClient())
              {
                  result = client.DownloadString(url);
              }
          }
          catch   {}
    
          return result;
      }
    
      /// <summary>
      /// 从指定URL中下载文件
      /// </summary>
      /// <param name="address"></param>
      /// <param name="filename"></param>
      /// <returns></returns>
      public static bool GetFile(string address, string filename)
      {
          try
          {
              if (string.IsNullOrEmpty(address) || string.IsNullOrEmpty(filename)) return false;
              using (WebClient client = new WebClient())
              {
                  client.DownloadFile(address, filename);
              }
              return true;
          }
          catch   {}
    
          return false;
      }
    
  • 从Bing首页的源代码文件中可以分析出背景图片所在的字段:

    g_img={url: "http://s.cn.bing.net/az/hprichbg/rb/AddoElephants_ZH-CN13744097225_1920x1080.jpg",id:'bgDiv',d:'200',cN:'_SS',crN:'bIm',
    hash: "226",del: 50}

因此有,解析函数:BingContent类中的GetImageUrl().

  • 设置Windows桌面壁纸,需要使用系统函数SystemParametersInfo().

在代码中导入:

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);

这里贴个获取系统当前壁纸的方法

    const int SPI_GETDESKWALLPAPER = 0x73;

    /// <summary>
    /// 返回当前的系统壁纸路径
    /// </summary>
    /// <returns></returns>
    public static string GetDesktopWallpaper()
    {
        string wallpaper = new string('\0', MAX_PATH);
        int ret = SystemParametersInfo(SPI_GETDESKWALLPAPER, (int)wallpaper.Length, wallpaper, 0);
        return wallpaper.Substring(0, wallpaper.IndexOf('\0'));
    }

有关SystemParametersInfo()的详细说明,见MSDN

关于壁纸设置的函数见Wallpaper类的成员方法:
public static void SetWallpaper(string path, WallpaperStyle style)

代码GitHub地址

https://github.com/raylei2013/BingWallpaper.git

Issue

  1. 自动下载的jpg文件的壁纸在Windows 7下设置不成功,其他系统尚未测试;

Reference

https://code.msdn.microsoft.com/windowsapps/cssetdesktopwallpaper-2107409c

http://cn.bing.com/

标签: windows, c#

添加新评论