`
liusu
  • 浏览: 171540 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

自动设置Bing背景作为桌面背景(Win7成功)

    博客分类:
  • Life
阅读更多
最近发现 http://cn.bing.com 主页每天都会有不同的背景图片,而且都蛮漂亮的。 于是有个想法,写个程序自动将bing站的背景

作为桌面背景。 考虑设置桌面背景这个‘专业’的工作我的本职java语言肯定是实现不了,临时学学C#'来实现。

其中包括,从http下载图片,调用DLL设置桌面背景等操作,一段一段的代码都是从网上搜索的。我只是把这些功能组合了起来。

代码估计会给专业写C#的人笑,但是,管它呢, 贴在这里做个纪念,也给自己以后写c#小程序,做个参考。

源码如下:

/*
 * Created by SharpDevelop.
 * User: hsieh
 * Date: 2009/10/26
 * Time: 21:23
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Web;
using System.Net;

namespace DesktopSwitch
{
	class Program
	{
		public static void Main(string[] args)
		{
			Console.WriteLine("Download image from 'http://cn.bing.com'.");
			Program dsw = new Program();
			string tempImage = Path.GetTempPath() + "\\" + "bing.jpg";
			dsw.GetImageFromBing(tempImage);
			dsw.SetDestPicture(tempImage);
			//Console.Write("Press any key to continue . . . ");
			//Console.ReadKey(true);
		}
		
		private void GetImageFromBing(String imagePath)
		{
			string url = "http://cn.bing.com";
			HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
			WebResponse response = request.GetResponse();
			Stream stream = response.GetResponseStream();
			Encoding encode = Encoding.GetEncoding("utf-8");
            StreamReader sr = new StreamReader(stream, encode);
            string html = null;
            char[] readbuffer = new char[256];
            int n = sr.Read(readbuffer, 0, 256);
            while (n > 0)
            {
                string str = new string(readbuffer, 0, n);
                html += str;
                n = sr.Read(readbuffer, 0, 256);
            }
            StreamWriter streamw = File.CreateText(@"C:\test3.txt");
			streamw.WriteLine(html);
			streamw.Close();
			
            //string pattern = "height: 267px; background-image: url\\(\\.+\\); opacity: 1;";
            //url:'\/fd\/hpk2\/Hayden_ZH-CN1124177866.jpg',id:'bgDiv'
			string pattern = @"url:'\\(/fd\\/[\w\d]+\\/[\w\d]+_ZH-CN[\d]{5,}\.jpg)',id:'bgDiv'";
            Match match = Regex.Match(html, pattern);
            if(match.Success)
            {
            	string imageUrl = match.Groups[1].Value;
            	imageUrl = url + imageUrl.Replace("\\","");
            	System.Console.WriteLine("Set image '" + imageUrl + "' as the Desktop background.");
            	downloadImage(imageUrl,imagePath);
            }
            else
            {
            	System.Console.WriteLine("Can't find image.");
            	System.Environment.Exit(-1);
            }
		}
		
		private void downloadImage(String url, String imagePath)
		{
			try{
				WebRequest request = WebRequest.Create(url);
				request.ContentType = "image/jpeg";
				Stream stream = request.GetResponse().GetResponseStream();
				byte[] mbyte = new byte[100000];
 	 			int allmybyte = (int)mbyte.Length;
  			int startmbyte = 0;
  			while(allmybyte>0)
  			{
  				int m = stream.Read(mbyte,startmbyte,allmybyte);
  				if(m==0)
  					break;
  
  				startmbyte+=m;
  				allmybyte-=m;
  			}
  			FileStream fstr = new FileStream(imagePath,FileMode.OpenOrCreate,FileAccess.Write);
  			fstr.Write(mbyte,0,startmbyte);
  			stream.Close();
  			fstr.Close();
			}catch(Exception e){
				Console.WriteLine(e.Message);
				Console.WriteLine("Get image from bing failed. Exit");
				System.Environment.Exit(-1);
			}
			
		}
		
		[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
        public static extern int SystemParametersInfo(
            int uAction,
            int uParam,
            string lpvParam,
            int fuWinIni
            );

        /// <summary>
        /// 设置背景图片
         /// </summary>
        /// <param name="picture">图片路径</param>
        private void SetDestPicture(string picture)
        {
            if (File.Exists(picture))
            {
                if (Path.GetExtension(picture).ToLower() != "bmp")
                { 
                    // 其它格式文件先转换为bmp再设置
                    string tempFile = @"C:\test.bmp";
                    Image image = Image.FromFile(picture);
                    image.Save(tempFile, System.Drawing.Imaging.ImageFormat.Bmp);
                    picture = tempFile;
                    setBMPAsDesktop(picture);
                    File.Delete(tempFile);
                }
                else
                {
                	setBMPAsDesktop(picture);
                }
              
            }
        }
        
        /// <summary>
        /// 设置BMP格式的背景图片
        /// </summary>
        /// <param name="bmp">图片路径</param>
        private void setBMPAsDesktop(string bmp)
        {
        	  SystemParametersInfo(20, 0, bmp, 0x2);
        }

	}
}



附件是编译好的exe文件和源码。
1
0
分享到:
评论
6 楼 不顾一切的自由 2012-10-24  
谢谢,这东西以前在学校学过,现在一点也不会用。
5 楼 liusu 2012-10-20  
不顾一切的自由 写道
显示的效果是这样的


怎么解决呢?

实在不好意思。 这个东西是我有段时间想体会一下C#的编程方式,临时写的。 可能现在跑已经有点问题了。。。 不过等我有时间,我会看看。
4 楼 不顾一切的自由 2012-10-10  
显示的效果是这样的


怎么解决呢?
3 楼 不顾一切的自由 2012-10-10  
我怎么运行不了呢?一打开就停止。
2 楼 红色蒲公英lazyboy 2011-07-31  
怎么用
1 楼 lyonslee 2010-08-04  
用了一下,很好用,不错!

相关推荐

    windows设置bing每日图片为桌面壁纸

    双击这个程序,系统会连接到Bing服务器,获取当前的每日图片,并将其应用到桌面背景上。这种方式使得用户无需手动操作,就能每天看到不同的壁纸,增加了使用电脑的乐趣。 为了实现开机自动切换壁纸,你需要将...

    Bing壁纸获取并设置桌面背景

    本文将详细介绍如何获取Bing的每日壁纸,并自动设置为桌面背景,以及实现定时切换的功能。 首先,我们需要了解如何获取Bing的壁纸。Bing提供了API服务,允许开发者获取其每日壁纸的信息,包括URL。这个过程通常涉及...

    python2爬取bing主页并作为桌面背景【免费】

    python2爬取bing主页并作为桌面背景,压缩包中包含py2.7的win32gui,供未安装者使用,且代码第一行注释即其下载地址,若为py3.x可从中下载,py3需要改为urllib.request 使用。

    bing背景2016节选

    微软的新搜索引擎Bing每天都会更新一副精美的背景图片,如果能将每幅图片统统收集起来,简直就是一巨大的图片资料库,往后必有用到之处。但是Bing只能显示当天的背景图片,以往用过的图片就无法找到,而且背景图片...

    bing背景2015节选

    微软的新搜索引擎Bing每天都会更新一副精美的背景图片,如果能将每幅图片统统收集起来,简直就是一巨大的图片资料库,往后必有用到之处。但是Bing只能显示当天的背景图片,以往用过的图片就无法找到,而且背景图片...

    每日自动更换必应bing桌面壁纸

    在这个场景下,我们可以使用 Python 这样的脚本语言来编写一个小程序,例如“pybingwp-1-5-6.exe”,这个程序可能是用 Python 编写的桌面应用,用于下载必应每日壁纸并设置为桌面背景。Python 有着丰富的库支持,如 ...

    每日自动更换必应bing桌面壁纸_pybingwp_BingWallpaper

    每日自动更换必应bing桌面壁纸_pybingwp_BingWallpaper 必应每日高清壁纸,自动更换必应桌面壁纸,每天自动下载必应Bing精美图片并更换桌面壁纸小工具,可以设置所在国、后台驻留与定时自动更换。

    下载bing背景图片,网络下载示例

    Bing背景图片以其高质量的图像和多样化的主题而闻名,是许多用户桌面壁纸的首选。 首先,我们需要了解WebRequest类,它是.NET Framework提供的一个抽象类,用于发起HTTP、FTP、TCP等不同协议的网络请求。我们通常会...

    python3 抓取必应bing首页图片作为桌面背景

    网上找到的在python3下都不能用,于是动手修改了一下,测试可用。 Python 版本:3.5.1 系统:win10 x64

    易语言获取bing背景

    易语言获取每日bing背景例子,给大家看看代码

    Firefox: 将Bing搜索默认设置为英文

    在源码和工具的上下文中,这可能意味着存在一个脚本、扩展或工具,允许用户批量修改Firefox的默认搜索引擎设置,或者自动化Bing的英文设定。对于开发人员来说,了解Firefox的配置文件结构和如何通过编程方式修改这些...

    自动下载bing壁纸并设置桌面壁纸

    原创,

    bing每日壁纸自动更换

    bing每日12点自动更换壁纸!可选择每个国家.

    Win7Codecs 设置程序中英文对照

    Win7Codecs是一款由Shark007制作的专门针对Windows 7操作系统的解码器集合,它与其他如K-Lite Codec Pack、完美解码、终极解码等解码器包的主要区别在于,它并不捆绑任何第三方播放器,而是专注于增强Windows 7原生...

    Bing Desktop v1.0 每日桌面壁纸更新

    安装 Bing Desktop (必应桌面) 之后,它会每天自动将 Bing 的每日壁纸设置成你的桌面,一般都是 1920×1200 分辨率的高清壁纸,基本能满足市面上所有流行的显示器尺寸了。此外,它还提供了便捷的搜索框,你可以通过 ...

    Win8系统下自动开启Bing的解决方法.docx

    总的来说,Windows 8自动打开Bing的问题可以通过调整组策略和注册表设置来解决。尽管这不是所有Windows 8系统都会遇到的问题,但对于遇到该问题的用户,按照上述步骤操作可以有效地消除这一困扰,恢复对开机启动项的...

    Win7_Codecs设置程序中英文对照文档

    Win7Codecs是一款由Shark007制作的专门针对Windows 7的音频视频解码器集合,不同于K-Lite Codec Pack、完美解码、终极解码等包含第三方播放器的解码器包,它专注于增强Windows 7内置的媒体播放器和媒体中心对多种...

    Bing每日图片用作桌面壁纸.docx

    - **自动更换壁纸**:安装Bing Desktop后,用户可以选择开启自动更换壁纸功能,每天开机或设定时间,桌面壁纸会自动更新为Bing当天的精选图片。 - **快捷操作**:通过Win+Y快捷键,用户可以快速调出主面板,查看和...

    Bing主页壁纸获取器

    这款获取器允许用户轻松地将这些美丽的图片收藏至本地,作为桌面背景或个人收藏。 ### HTML解析原理 Bing主页壁纸获取器的核心功能是解析Bing网站的HTML源代码。HTML(HyperText Markup Language)是网页的基础...

Global site tag (gtag.js) - Google Analytics