前天无意发现win10的锁屏壁纸挺漂亮的,就想着能不能保存下来?网上一搜果然有资料,当时参考的连接如下
http://jingyan.baidu.com/article/fedf07375ea25135ad897761.html
步骤挺简单的,目录为C:UsersXXXAppDataLocalPackagesMicrosoft.Windows.ContentDeliveryManager_XXXLocalStateAssets。但我们最终看到是一堆乱码式的文件,加个.jpg即可访问。感觉挺麻烦的,而且不是所有的文件都是全屏壁纸!
能不能写个搜索的小程序,直接点一下就自动导出壁纸呢!当然是可以的啦(不然也没这篇文章了 ⊙▂⊙)~ 具体解题思路如下
1、获取当前显示器屏幕尺寸,为后面判断是否为全屏壁纸文件做准备
1 //获取显示器屏幕尺寸,用来判断全屏大小的壁纸 2 double height = SystemParameters.PrimaryScreenHeight; 3 double width = SystemParameters.PrimaryScreenWidth;
2、获取最终壁纸所在的文件夹(这里写的不太满意 囧rz)
//最终的壁纸目录 string targetPath; //获取当前用户文件夹 string userPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); if (Directory.Exists(userPath + @"AppDataLocalPackages")) { foreach (var itemF in Directory.GetDirectories(userPath + @"AppDataLocalPackages")) { //由于这级目录后缀会更换,所以用固定前缀来寻找目录 if (itemF.IndexOf("Microsoft.Windows.ContentDeliveryManager") > 0) { targetPath = itemF + @"LocalStateAssets"; } } }
3、判断是否为全屏壁纸。是则导出,不是则狗带~ (这里判断是否为有效的图片文件,比较粗暴。如果其他好的方法,欢迎指出 ♪(´▽`))
1 foreach (var itemW in Directory.GetFiles(targetPath)) 2 { 3 try 4 { 5 BitmapImage image = new BitmapImage(new Uri(itemW)); 6 7 //这里不用用Height和Width属性判断,因为不能保证每张图片都是96dpi 8 if (image.PixelHeight == height && image.PixelWidth == width) 9 { 10 File.Copy(itemW, filePath + string.Format(@"{0}.jpg", ++i), true); 11 } 12 } 13 catch (NotSupportedException ex) 14 { 15 //如果不是图片文件,则继续处理 16 continue; 17 } 18 catch (Exception ex) 19 { 20 21 } 22 }
最终的程序如下,一共找了5张壁纸
所有的结果保存在同级目录Assets下面(由程序创建的)。 当然,这几张是我测试用的,不是微软推送的,别想多! 传送门