前言
突然灵光一闪想到的有趣项目,选择使用Python开发,花了几天完成的。克服了很多困难,很多点子基本都实现了。
作为一个资深的116博客小白,在论坛混迹了这么久了还没发过贴做贡献,实在惭愧,这是我第一个帖子,请大家多多支持,温柔批评。
在发帖前已经搜索过论坛中已经有朋友做过类似的工具了 。标题不错,我就借来用用了,哈哈,谢谢。希望这个小工具对大家有用。
程序介绍
使用Python
编写的自动拉取网络图源并进行自动轮换桌面壁纸的Windows
应用程序。
使用它,可以让你的桌面背景像一盒巧克力一样,你永远不知道下一颗是什么味道,是惊还是喜,只有等你去探索去发现。
特性:
-
自动拉取网络图源,自动切换桌面背景。
-
可配置。通过配置文件定义壁纸类型、切换间隔等等。
-
支持多种方式启动。一次性启动(控制台、后台)、开机自启。
-
支持全局热键配置。目前支持三个热键:上/下一个桌面背景、定位当前桌面背景文件。
PS:程序所使用的壁纸图源为知名壁纸网站wallhaven,程序暂无提供其他图源选择的功能,只能修改参数以获取wallhaven中不同类型的壁纸。
程序控制台界面:
如果对我的项目感兴趣,欢迎点个star
,这将是对我的最大支持和鼓励!
如何使用
-
默认壁纸类型。使用默认配置,基本可以满足大部分需求。
-
自定义壁纸类型。
-
打开壁纸网站wallhaven Random Wallpapers,按照下图步骤选择你的壁纸类型,并复制链接。
-
打开程序的配置文件,修改
Api -> url
配置项,值为刚复制的链接。 -
重启程序(结束程序再重新打开)。
-
-
自定义更多配置项。请参考配置文件解析。
工作目录
应用程序运行时产生的运行文件保存在应用程序所在根目录的run
文件夹下,会产生以下文件或文件夹。
-
文件夹:
log
。记录程序的运行日志,程序每天的运行日志保存在一个日志文件,最多保存最近30天的日志。 -
文件夹:
wallpapers
。目录下存放网络拉取的当前轮换的桌面壁纸。如果在配置了Task -> retainbgs
选项为真,在新壁纸拉取完成时,会把旧的壁纸保存在wallpapers
目录下的某文件夹,文件夹命名方式为新壁纸拉取完成的日期时间%Y-%m-%d-%H-%M-%S
,否则会删除就的壁纸文件。 -
文件:
config.ini
。重要文件!程序运行的所需的配置文件,如果缺失也可以使用默认配置来运行程序。有关可配置选项,请看往下看。 -
文件:
pid
。重要文件!记录当前目录应用程序的线程ID,用以检测程序的运行和结束程序的运行。本程序没有把它放到某个安全的地方、或者使用其他方式以实现相对安全的应用程序全局单例运行。
配置文件
程序默认有效配置(该配置会在配置文件缺失时启用),以下;
后为字段注释:
[Api]
; 配置你喜欢的图源类型的URL,怎么获取请看上文"如何使用",程序会根据该URL获取它的参数信息并拉取图源。
; 如果配置了这个选项,那么下面的配置项 [Params] 可以不用配置,相反如果配置了 [Params] 那个这个 url 也可以不用配置。
; 如果我两个都配置会怎么样?答案是会取他们两个的参数值,对于重复的参数以 [Params] 配置的为准,并去掉配置值为空的参数。
; PS:给不认识 URL 格式的朋友提醒一下,URL 中 ? 后的为请求参数,以 & 符号分割多个参数,每项的 = 左边为 Key ,右边为 Value 。
url = https://wallhaven.cc/search?categories=111&purity=100&sorting=random&order=desc
[Params]
categories = 111
purity = 100
sorting = random
order = desc
resolutions = 1920x1080,2560x1440
[Task]
; 桌面背景轮换的时间间隔,单位秒
seconds = 520
; 记录当前壁纸的在轮换壁纸列表中下标,无需修改。作用是程序下一次启动可以从该壁纸重新开始切换。
current = 0
; 下载壁纸时的线程数量,它取值在0-32之间,设为0时取值为设备CPU核心数+4。建议不要作修改,使用的图源网站限流,并发太高会导致壁纸下载失败。
threads = 2
; 下载每张壁纸前的随机暂停时间,随机值在两数之间,两个参数以半角逗号分割,参数可以是小数。它同样是控制下载频率的参数,以提高下载成功率,不建议修改。
rndsleep = 0.0,5.0
; 是否保存旧的壁纸,取值为真或假,具体解析请看上面对工作目录下文件夹wallpapers的解析。
retainbgs = 0
; 热键设置说明:只能是特定的小写字符,每个键位以符号 + 分割。最多支持3个修饰键(ctrl、shift、alt和win)和一个普通键。按键对应的可取字符值会在下文"热键字符"中给出。
; 注意:设置单一的一个键作为热键可能会使原有的按键功能失效,所以慎重采取这样的设置。
[Hotkey]
; 是否启用全局热键,取值为真或假。
enabled = 1
; 切换到上一个桌面背景
hk_prev = control+alt+left
; 切换到下一个桌面背景
hk_next = control+alt+right
; 定位到当前桌面背景文件
hk_locate = control+alt+up```
注明:对于取值为真假的配置选项,当值为空、0、false、off都表示假,不区分大少写,其他表示真。
## 运行参数
运行程序时可选择的参数:
- 缺省\-r/\-\-run参数:打开程序菜单控制台
- \-h/\-\-help:查看命令参数帮助选项
- \-r/\-\-run:指定程序的运行方式,仅支持一下三种方式
- console:使用控制台窗口启动,单次启动
- background:在后台启动,单次启动
- powerboot:在后台启动,并且开机自启
- \-l/\-\-log:指定运行日志记录的方式,支持以下4中方式
- file:仅以文件方式记录
- console:仅以控制台方式打印
- both:使用文件记录和控制台打印
- none:关闭运行日志
- \-s/\-\-lnk:根据给的路径创建程序的快捷方式,如果为空则在当前程序路径创建。第1个参数表示创建快捷的路径,它可以是路径,也可以的包含路径的文件名(文件名需含后缀.lnk),还可以是windows特殊路径,它必须以shell:开头,如使用`shell:desktop`表示桌面路径。第二个以后的参数为指定的快捷方式启动参数,需要使用半角双引号把快捷方式启动参数包起来。
示例:
```shell
随机桌面壁纸.exe -r console --log console -s shell:desktop "--run background --log file"
命令说明:以上这段命令表示以控制台窗口方式启动随机桌面壁纸
应用程序,使用控制台的方式打印运行日志,顺便在桌面创建应用快捷方式。如果运行该快捷方式,将会以后台的方式启动随机桌面壁纸
应用程序,并使用文件的方式记录运行日志。
热键字符
如果需要设置热键,只能使用以下字符表示键位,而且只能是小写字符,更多的使用请到system_hotkey查看。
- 修饰键:control、shift、alt、super(说明:win键)
- backspace、tab、return(说明:回车键)、pause、escape(说明:退出、左上角那个)、space、insert、delete
- 大键盘:0-9,a-z;小键盘:kp_0 - kp_9;kp_multiply、kp_add、kp_subtract、kp_decimal、kp_divide
- F键:f1 - f24
- 媒体键:media_play_pause、media_previous、media_next
其它说明
- 程序在最后一张壁纸切换完毕后就会重新拉取新的随机壁纸。
- 程序在Windows
锁屏状态
下(WIN+L)不会进行切换,但程序暂时还无法检测屏幕的关屏状态
,如果你只是关闭了显示器,那么程序仍会自动切换壁纸。 - 如果设置了热键【上/下一个壁纸】,本程序在内部限制了切换按键每次按下生效的间隔时间,这个值为
0.562632
,如果上一次切换到本次切换的时间间隔在这个时间内,壁纸切换不会成功。 - 程序内部限制了拉取壁纸列表的失败次数,这个值为
10
,如果连续获取失败的次数到达这个值,程序会发出提醒。 - 程序在拉取壁纸时使用系统(IE)代{过}{滤}理服务器进行请求下载。
- 如果运行程序时不指定日志的记录方式,那么如果是
console
运行,日志记录方式默认为both
,如果是background
或powerboot
运行,日志记录方式默认为file
。
总结
已经很久没碰过Python了,两年多前入门Python做了一下爬虫后就基本没碰过了,这次借着这个项目重拾了一下自己的Python技能。选择Python做的原因主要是Python开发相对简单,丰富的库,可以拿来直接用,满足自己的开发需求,快速开发。但由于我的Python是入门水平的,而且也很久没接触了,项目中难免会有多不规范的地方,请大家多多指教,温柔批评。
还有一点想吐槽的是,Python方便是方便,但是挺有毒。写了几天Python,我再去写Java、JS,我已经不记得写变量类型和大括号了。[/捂脸]
下载
软件分为32位和64位的单文件和绿色版打包,以下为它们各自运行的资源占用情况,大家可以根据自己喜好下载对应的应用程序。
蓝奏云:https://lanzoui.com/b00umf2ej (密码:rdb)
天翼云:https://cloud.189.cn/web/share?code=nENBJvIZZnEv (访问码:05mb)