C#将必应每日一图设为桌面背景

winfrom写的不要介意,首先过程分为两个部分,分别是下载图片和设置桌面壁纸,其实不难。

1.下载图片

解析url,Bing首页的接口:http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1

你可以点击这个链接进去,能够看到这是一个xml排版

C#将必应每日一图设为桌面背景_第1张图片

 重点就是标箭头的这一行,这就是需要拼接的图片地址,

我拿今天11-30的为例将后半段跟图片地址拼接之后的地址

https://cn.bing.com//az/hprichbg/rb/KilchurnSky_ZH-CN9305096030_1366x768.jpg,通过访问也就获取到了下面的图片,也就是今天的bing美图。

 接下来我们需要的就是用代码来实现图片的下载了也就是同样的请求解析,我把每句我自己理解的注释都加上了,方便学习(ps:我自己很多都是网上找的)下面就直接贴代码吧,执行的代码因为是写在load当中的

        private void Form1_Load(object sender, EventArgs e)
        {
            //请求xml径的url地址
            string url = "http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1";
            //请求并且解析
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myresponsestream = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(myresponsestream, Encoding.UTF8);
            string retString = streamReader.ReadToEnd();
            streamReader.Close();
            myresponsestream.Close();
            int a = retString.IndexOf("");
            int b = retString.IndexOf("");
            //将指定的地址拼接在url后面获取然后将图片进行报错,这里的mz()方法是将当前时间设置为名字的,不用在意
            string imgurl = "http://cn.bing.com" + retString.Substring(a + 5, b - a - 5);
            setimg(imgurl);
            string name = mz();
            Image image = Image.FromFile(name+".jpg");
            image.Save(name+".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
            SystemParametersInfo(20, 1, name+".bmp", 1);
            this.Close();
        }



        /// 
        /// 下载指定url图片
        /// 
        /// 图片地址
        public static void setimg(string url) {
            try
            {
                WebRequest request = WebRequest.Create(url);//图片src内容
                WebResponse response = request.GetResponse();
                //文件流获取图片操作
                Stream reader = response.GetResponseStream();
                string path = mz() + ".jpg";        //图片路径命名 
                FileStream writer = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
                byte[] buff = new byte[512];
                int c = 0;                                           //实际读取的字节数   
                while ((c = reader.Read(buff, 0, buff.Length)) > 0)
                {
                    writer.Write(buff, 0, c);
                }
                //释放资源
                writer.Close();
                writer.Dispose();
                reader.Close();
                reader.Dispose();
                response.Close();
                //下载成功
            }
            catch (Exception msg)
            {
                MessageBox.Show(msg.Message);
            }
        }

 现在的关键点就是将他设置为壁纸了,

其实这个API网上随便都能找到,

SystemParametersInfo(20, 1, name+".bmp", 1);

就这这个方法,重点在于需要导入一些东西

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

 导入完了就能用了,代码方便理解嘛,下面直接贴出下载链接方便下载学习咯

链接:https://pan.baidu.com/s/15qV513FDer4xswyvl5rOPg 密码:yhxv

被吞了评论一下哈,看见了就私发

 

 

你可能感兴趣的:(.NET)