通過搜狐微博的api,使用http basic 認證,新浪的oauth還要通過浏覽器認證,太麻煩,整個程序分為幾個小部分,不難。
實現以下功能:
1,開機啟動。程序運行有會創建C:gimg文件夾,會將程序自己copy到該文件夾下,以後開機啟動將用該文件夾下的程序。下載的壁紙也在該文件夾下。
2,自動更新壁紙。
3,從搜狐微博獲取圖片鏈接,下載圖片。
4,md5驗證,用於比較當前的壁紙與下載的壁紙是否相同。
5,隱藏窗口,後台運行,不需要窗口滴。
6,圖片格式轉換,xp系統下調用SystemParametersInfo更改壁紙,只支持bmp格式的。這裡注意,上傳的圖片也要是bmp格式的。
代碼中用到了搜狐微博提供的封裝好的C#.net類,使用很簡單。該類庫下載地址:
http://www.iiidown.com/source_link.php?type=1&key=71510353&url=http%3A%2F%2Fdlwt.csdn.net%2Ffd.php%3Fi%3D751826827284012%26s%3D025045b263981a9e346d83067b6b9d3c
下面貼上代碼:
using System;using System.Collections.Generic;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Net.Sockets;using System.IO;using System.Threading;using System.Net; using System.Drawing.Imaging;using web.ApiService; //搜狐api類庫。namespace client_souhu{ public partial class main : Form { [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")] public static extern int SystemParametersInfo1( int uAction, int uParam, string lpvParam, int fuWinIni ); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SystemParametersInfo(uint uAction, uint uParam, StringBuilder lpvParam, uint init); const uint SPI_GETDESKWALLPAPER = 0x0073; string localPath = @"c:gimg"; //創建文件夾的路徑。 string localFilename = "1.bmp"; //下載下來圖片的文件名。 string mainName = "wallpaper.exe"; //主程序的名字。 string lastThemesPaperMd5 = ""; //保存最近一次圖片的md5。這裡實現有問題,可以不用管先。 string lastBgimgPaperMd5 = ""; //最近上一次下載圖片的md5. string tmpFileName="1.jpg"; bool downloadingImg = false; //該值為true時表示正在下載圖片,暫停切換壁紙。 string weiboCreateTime; //微博的創建時間,用於判斷圖片微博是否更新,從而判斷是否要下載圖片。 //搜狐微博賬號信息。 //在微博上傳圖片時,微博的內容為imgBz內容,程序根據這個標志,下載圖片。對於xp用戶,上傳的圖片必須為.bmp格式的。 //只要在最近20條微博中,有帶有imgBz標志的圖片微博,就可以更換壁紙 string username = "你的微博賬號"; string passwd = "你的微博密碼"; string imgBz = "wp_public"; //不同的人用不同的標志,下載不同的圖片,該標志自定義 public main() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { updateSelf(); autoRun(); //單獨線程。 Thread updateImgThread = new Thread(new ThreadStart(updateImg)); updateImgThread.Start(); Thread downloadImgThread = new Thread(new ThreadStart(downloadImg)); downloadImgThread.Start(); } //更新圖片 private void updateImg() { Thread.CurrentThread.IsBackground = true; StringBuilder wallPaperPath = new StringBuilder(200); SystemParametersInfo(SPI_GETDESKWALLPAPER, 200, wallPaperPath, 0); while (true) { if (File.Exists(localPath + localFilename) && !downloadingImg) { string x = getMD5Hash(wallPaperPath.ToString()); string y = getMD5Hash(localPath + localFilename); if (x != lastThemesPaperMd5 || y != lastBgimgPaperMd5) { SystemParametersInfo1(20, 0, localPath + localFilename, 1); lastThemesPaperMd5 = x; lastBgimgPaperMd5 =y; //MessageBox.Show("change Paper:Themes"); } } Thread.Sleep(5000); } } //從微博下載圖片。 private void downloadImg() { Thread.CurrentThread.IsBackground = true; WebClient wc = new WebClient(); while (true) &nbs