欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用C++/CLI开发Windows锁屏壁纸小工具

程序员文章站 2022-05-27 09:10:01
...

Windows锁屏壁纸

Windows10目前都会默认使用锁屏壁纸,有时候会有喜欢的图片出现,虽然可以手工保存下来,但是步骤繁琐,操作非常麻烦。

C++/CLI

C++/CLI作为托管C++的升级,本就是比较生僻、少有人用的技术,随着它的后续C++/WinRT的推出,更是黄花中的黄花,几乎没有人去用了。但是作为C++和.net的结合的技术,对于C++开发者来说,可以方便的整合C++代码和.NET的强大功能,还是很有用处的。比如在这个小工具中可以使用WinForm替代MFC开发界面,效率真是不知高到哪里去了。

锁屏壁纸的获取方法

方法很简单,但如果每次都要手工处理,那就会很麻烦。
windows会定期从服务器获取图片,放到如下用户目录:

C:\Users\%username%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\

cw5n1h2txyewy是根据某种机制生成的,不同windows版本可能会变(不过现在win10的几个版本都没有变),但前面的部分总是固定的。

C:\Users\%username%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_

其实每张锁屏图片都是有横、竖两个版本,windows每次会都取回再根据用户设备选择显示。
图片会保存为jpg格式,但是注意文件名是没有后缀的。
将这些文件复制出来,更改后缀名为jpg后就可以看到图片,该文件下还有一些辅助文件并不是图片,但功能不明,置之不理即可。一般图片都大于100K,可用文件大小做简单判断。

C++/CLI实现抓取锁屏壁纸工具

其实这里用C++/CLI完全没有必要,直接用C#会更简单。是为了练习,感受一下C++用.net的便捷性。
图片获取原理如上,实现的基本方法是:

  • 用WinForm实现设定界面
  • 用NotifyIcon实现系统托盘
  • 用FileSystemWatcher检测文件夹的变化(图片文件新增事件检测)
  • 用Image判断新增文件是否为图片、以及图片的大小和横、竖选择

代码

代码本身很简单,可以从github下载。

界面说明

设定界面

使用C++/CLI开发Windows锁屏壁纸小工具
一般情况下只需要设置一下复制目录,点击[Start Monitor]即可。

  • 监测目录默认设置为锁屏壁纸所在目录,一般不需要修改,当然可以手工更改
  • 当程序运行后,如果有新锁屏壁纸出现,就可以根据用户的要求(大小、横屏、竖屏)等将符合要求的图片复制到指定目录
  • 如果设置了自动启动,会在电脑启动后就自动运行
  • 点击Minimize后,程序缩小到系统托盘,双击托盘图标或右键菜单可再次显示设定界面
  • 右键点击系统托盘图标,在菜单出选择退出即可退出程序
  • 抓取到的图片数(如果有)会显示在界面下方,并且会弹出windows气泡进行提示
  • 复制目录需要事先建好,如果设定成为桌面壁纸目录,就可以实现将锁屏壁纸当做桌面壁纸的自动化

抓取效果
使用C++/CLI开发Windows锁屏壁纸小工具
简单、好用。

zip下载

不愿意自己编译的朋友,可以直接下载下面的zip文件,解开双击exe即可直接使用。
(需要安装.net framework 4.0以上)