调查发现网上所有类似教程都是针对Windows聚焦的,本文独家提供对于非Windows聚焦的桌面/锁屏壁纸获取方法!

桌面

桌面壁纸位于:%APPDATA%\Microsoft\Windows\Themes

其中%APPDATA%是用户特定的环境变量指定的路径,通常是C:\Users\用户名\AppData\Roaming。可以在PowerShell中输入`gci env:APPDATA`查询当前用户的%APPDATA%路径。

如果你只有一个显示器

此目录下将会有一个名为CachedFiles的目录

目录下只有一张图,就是你当前的桌面壁纸

如果你有多个显示器

多显示屏时情况变得复杂,并不是简单地多一张图,而是取决于【选择适合你的桌面图象】这项设置的选项。

则是,选择【填充】、【适应】、【拉伸】时,每个显示屏会显示不同的图像,在Themes目录下会有多个无扩展名的文件Transcoded_xxx,其中xxx是显示器从000开始的顺序编号。例如有两个显示器时:

虽然没有扩展名,但这两个文件本质上仍然是JPG图像,只要加上.jpg扩展名就能打开。

选择【平铺】、【居中】、【跨区】时,所有显示屏共享同一张壁纸,在Themes目录下会有一个无扩展名的TranscodedWallpaper文件:

同样本质上是个JPG图像,加上扩展名就能打开。

编程接口

IDesktopWallpaper 接口 (shobjidl_core.h)https://learn.microsoft.com/zh-cn/windows/win32/api/shobjidl_core/nn-shobjidl_core-idesktopwallpaper

此COM接口支持桌面壁纸的获取和设置,还支持幻灯片放映图集和顺序,包括壁纸展开方式……堪称万能,完美覆盖了你可能需要对桌面壁纸进行的任何操作,功能足够丰富。实际上,你只需要使用这个API就可以直接单独取得和设置任何一个显示器上的桌面壁纸图像,不需要知道上文所述的文件系统内的存储方式。唯一的缺点就是COM接口使用起来比较繁琐,你可能需要专门学习COM接口使用方法。

UserProfilePersonalizationSettings.TrySetWallpaperImageAsync 方法https://learn.microsoft.com/zh-cn/uwp/api/windows.system.userprofile.userprofilepersonalizationsettings.trysetwallpaperimageasync此Windows运行时API只支持设置桌面壁纸,而且不能区分不同显示器,只能给所有显示器设置同一张桌面壁纸。如果你只有设置的需求,用这个API比较简单,相比于繁琐的COM,在.NET和C++中都很容易使用。

锁屏

锁屏壁纸位于:%ProgramData%\Microsoft\Windows\SystemData\用户SID\ReadOnly

其中%ProgramData%是计算机特定的环境变量,可在PowerShell中用`gci env:ProgramData`查找本机的%ProgramData%变量值,一般来说是【C:\ProgramData】

【用户SID】是用户在当前Windows计算机上的唯一标识符,可以在PowerShell中输入`whoami /user`查询自己的用户SID

不同于桌面,锁屏壁纸的管理更加复杂。首先,此目录通常是不向一般用户开放访问权限的,可能需要设置访问控制列表(安全权限)。其次,此目录下并不直接存放壁纸图片,而是会有1~6个子目录,分别为LockScreen_A~F,每个子目录下都是同一张图的不同缩放和裁剪尺寸。

上图是我的计算机上,只有3个,你的计算机上最多可能会有6个。这些子目录中只有一个是真正存放了当前的锁屏壁纸图,其它都是缓存的历史记录。为了查询哪一个是真正的当前锁屏,我们还需要翻阅注册表:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SystemProtectedUserData\用户SID\AnyoneRead\LockScreen

最后的LockScreen键不一定存在——如果用户没有设置过任何锁屏,这个键就可能是不存在的。

我们需要关注的是此键的(默认)值,它是一个6个大写英文字母组成的字符串,其首字母就对应着当前壁纸的编号。如上图首字母是A,说明LockScreen_A就是目前正在使用的锁屏壁纸。相信你也能猜到,后面的CB就是以前曾经使用过的锁屏壁纸历史记录,ZYX则是未使用的占位符。实际上,完全可以通过修改这个键值来切换当前锁屏图,例如你把开头的ACB改成BAC,就能看到LockScreen_B中的图片变成了当前锁屏图。

我们打开LockScreen_A:

其中存放了同一张图的多种不同的裁剪和缩放尺寸,这些都是在设置一张新的锁屏图时自动生成的。其中LockScreen.jpg是原图,其它都是经过修改的。

编程接口

UserProfilePersonalizationSettings.TrySetLockScreenImageAsync 方法https://learn.microsoft.com/zh-cn/uwp/api/windows.system.userprofile.userprofilepersonalizationsettings.trysetlockscreenimageasync 此Windows运行时API只能用于设置当前锁屏壁纸,不能获取。

LockScreen 类https://learn.microsoft.com/zh-cn/uwp/api/windows.system.userprofile.lockscreen此Windows运行时API支持获取和设置当前锁屏壁纸。但是,获取锁屏壁纸可能会失败,原因未知。一旦此方法失败,你将只能通过上文所述的方法,手动检索文件系统和注册表来获取当前锁屏壁纸。

不同于桌面壁纸,Windows没有提供可靠的COM接口或其它API支持获取当前锁屏壁纸。当然也可能还有我不知道的欢迎指出。第三方库也大多是针对Windows聚焦,获取原生锁屏壁纸的可靠解决方案,我没有在网上搜索到任何其它。

获取Windows当前桌面/锁屏(非Windows聚焦)壁纸相关推荐

  1. 锁定计算机时候的屏幕壁纸,电脑锁屏的时候屏幕壁纸怎么更改

    满意答案 Liansnnn 2017.01.05 采纳率:54%    等级:9 已帮助:1812人 1.如何更换Win8锁屏壁纸 在Win8开始屏幕或者桌面界面上,将鼠标移动到桌面最右侧右下角,即可 ...

  2. Windows远程桌面连接后被连接的桌面锁屏

    今天用远程桌面连接后,可以看到被连接的桌面的,但是被连接的电脑自己是锁屏的,如果输入密码解锁,那么远程桌面会自动退出. 这是因为Windows只允许最多一个用户登录,远程桌面连接相当于一个用户登录了, ...

  3. 如何获取Windows 10的锁屏壁纸

    本功能仅限于Windows 10锁屏界面设置为聚焦模式的用户,设置聚焦模式后才会每天自动下载不同的壁纸. 如果没有开启锁屏界面聚焦模式那么只有系统默认壁纸. 打开路径 C:\Users\XXX\App ...

  4. Windows 实现桌面截屏并保存为.jpg

    /*********************************************************************************************/ /*   ...

  5. 更改Windows电脑的锁屏pin密码

    如图所示 1.在设置里打开账户 2.在登录选项里选择 PIN那一项 3.更改为新的锁屏密码

  6. windows虚拟桌面_如何在Windows 10中使用虚拟桌面

    windows虚拟桌面 Windows 10 finally added virtual desktops as a built-in feature. If you keep a lot of ap ...

  7. windows远程桌面_如何使用Windows远程桌面连接Ubuntu 干货

    近期网盾科技给大家分享了一些教程类的干货,有很多小伙伴都收藏了网盾科技的文章,能对大家有帮助就好.今天网盾科技再给小伙伴们讲解一下如何使用Windows远程桌面连接Ubuntu,干货收藏! Windo ...

  8. 计算机桌面锁屏设置,怎么设置电脑锁屏

    怎么设置电脑锁屏 当在使用电脑的时候难免会遇到中途离开的情况,可能就是一小会,此时不想关机,也不想让别人在此期间操作电脑,因此就需要为电脑添加一个密码使它处于锁屏状态,那么具体怎样设置才能让电脑锁屏呢 ...

  9. Linux:VNC桌面锁屏问题处理

    问题: 最近遇到一个问题,就是VNC远程桌面,在一段时间无操作就会锁屏,每次都要重新输入账号密码登录,十分麻烦. 这是息屏出现的界面: 按回车或者从下往上拉动界面,就会进入锁屏界面(也就是要你输入登录 ...

最新文章

  1. 我心中的核心组件(可插拔的AOP)~分布式Session组件
  2. fullcalendar 显示的时间间隔只有四十五分钟_手腕上的机械闹钟百达翡丽 Ref.5520P旅行时间闹钟腕表...
  3. DbVisualizer数据库连接工具默认查询结果只显示100条解决方法,dbvis如何展示更多行,如何显示全部数据
  4. 《软件工程》第01章在线测试
  5. django model数据 时间格式
  6. centos 7.2 mysql 允许_CentOS 7.2 mysql-5.7.17 审计插件安装、开启与设定
  7. 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...
  8. jQuery中的动画理论干货
  9. onvif协议服务器端口,通过onvif协议接入海康、大华NVR步骤
  10. Leetcode刷题之旅1
  11. Silverlight+WCF 新手实例 象棋 棋子移动-规则补充(三十七)
  12. Android app是如何杀掉的
  13. cgroup学习(六)——attach task
  14. (Web前端)后台管理系统框架收集
  15. 精益软件研发的秘密 IT大咖说 - 大咖干货,不再错过
  16. Contrastive Loss(对比损失)
  17. Unity3d FingerGestures
  18. odoo异常:Expected singleton: res.users()
  19. sox处理mp3_sox :音频文件转换命令
  20. python编程8g的内存够么_内存8G够用吗?深入解读~

热门文章

  1. 黑苹果10.15.2 安装总结记录
  2. win7永恒之蓝漏洞修复方案
  3. 买路由要买带“WIFI6”认证的吗?看完本篇评测就知道了
  4. 百度魔图国际化版本产品改版思-百度UE讲堂-专题视频课程
  5. 全球自动驾驶实力排名公布:谷歌第一,百度第七
  6. Luogu P1462 通往奥格瑞玛的道路(最短路+二分)
  7. 如何评价光子氪金版刺激战场—和平精英?玩家:我还是去玩国际服吧
  8. [2022-kaggle]-Novozymes Enzyme Stability Prediction前排高分baseline(Novozymes 酶稳定性预测)
  9. Codeforces Round #291 (Div. 2)
  10. 教你一分钟使用PS将证件照的白底换为红底