static async Task Loop() { var lastDay = -1; string lasturl = ""; while (true) { try { //检查日期并更换桌面壁纸 var currentDay = DateTime.Now.Day; if (lastDay != currentDay) { //新的一天来临了!昨晚被杀的是(划掉 //获取最新的必应美图,此高清Uri由晨旭提供~ var response = await client.GetAsync("https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&pid=hp&uhd=1&uhdwidth=3840&uhdheight=2160"); if (!response.IsSuccessStatusCode) { continue; } var json = await response.Content.ReadAsStringAsync(); var responseObj = BingResponse.FromJson(json); var url = "https://cn.bing.com" + responseObj.Images[0].Url; if (url == lasturl) { //这和上次的一样嘛!等待interval后重新获取 lastDay = -1; } else { response = await client.GetAsync(url); string tmp = Path.Combine(Path.GetTempPath(), "temp.jpg"); using (System.Drawing.Image image = System.Drawing.Image.FromStream(await response.Content.ReadAsStreamAsync())) { //删除可能存在的旧的临时文件 if (File.Exists(tmp)) { try { File.Delete(tmp); } catch { } } //保存图片 image.Save(tmp); } //设置壁纸 RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true); string WallpaperStyle = "", TileWallpaper = ""; switch (style) { case Program.WallpaperStyle.Center: WallpaperStyle = "1"; TileWallpaper = "0"; break; case Program.WallpaperStyle.Stretch: WallpaperStyle = "2"; TileWallpaper = "0"; break; case Program.WallpaperStyle.StretchToFill: WallpaperStyle = "10"; TileWallpaper = "0"; break; case Program.WallpaperStyle.Tile: WallpaperStyle = "1"; TileWallpaper = "1"; break; } key.SetValue("WallpaperStyle", WallpaperStyle); key.SetValue("TileWallpaper", TileWallpaper); SystemParametersInfo ( SPI_SETDESKWALLPAPER, 0, tmp, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE ); lastDay = currentDay; lasturl = url; if (showCopyright) { //绘制版权信息 var copyright = responseObj.Images[0].Copyright.Replace("(", "").Replace(")", "").Replace(" ©", "\n©"); DesktopTextHelper.ClearText(); DesktopTextHelper.DrawText("Microsoft YaHei UI", 14, FontStyle.Regular, Color.FromArgb(255, 255, 255, 255), copyright); } } } } catch { } await Task.Delay(TimeSpan.FromMinutes(interval)); } }
public static string ToJson(this BingResponse self) => JsonConvert.SerializeObject(self, BingPic.Converter.Settings);