Xenon
1
The Fluid Canvas for Your Desktops.
ChromaFlux 是一个简单的动态壁纸软件。
使用aardio开发,渲染壁纸的核心代码参考了小风车的aardio分支。
特性
- 多显示器独立设置:为每个显示器分配不同的壁纸,支持显示器任意排列。
- 多种格式支持:支持常用的静态图片和动态视频格式(视频解码由libmpv提供)。
- 智能自适应:自动检测显示器连接、分辨率、排列顺序的变化,并实时调整壁纸布局。
- 资源感知:当桌面被其它窗口完全遮挡时,自动暂停动态壁纸渲染,降低CPU/GPU占用。
- 稳定架构:采用守护进程 + 独立渲染进程模型,进程隔离,确保程序运行稳定性。
- 灵活使用:支持通过命令行直接启动(控制)独立渲染进程。
快速开始
下载
前往Releases页面下载最新的已编译版本,双击运行即可。
分流下载:钛盘
支持Windows 10/11系统(更低版本暂未测试)
基本使用
程序会先启动守护进程,在后台静默运行,然后打开控制窗口界面。
在控制窗口界面:
- 可以选择需要管理的显示器
- 为不同显示器设置不同壁纸
- 设置开机自启动/静默启动
点击应用,守护进程会根据配置加载渲染进程。
反馈
欢迎通过以下方式报告Bug或提出建议。
开源地址
Github,内有更详细的介绍。
Xenon
3
好像没人看啊,那我多嘴说几句原理,以及写程序时踩的一些坑。
原理其实很简单,就是给桌面管理器(类名Progman)用SendMessage发送0x52c消息,触发桌面窗口调整布局。
但不同的系统表现行为还不太一样。
比如我开发的时候系统是Win11 23H2,不响应无wParam和lParam(SendMessage的第三个和第四个参数)的0x52c消息,必须手动指定wParam = 0x0d、lParam = 0x01才行。
又如Win11 24H2之后的系统窗口布局变了,嵌入壁纸的层和桌面图标层在一个层级。将壁纸嵌入后必须设置WS_EX_LAYERED属性并指定透明度为255(不透明),才能正常显示图片(libmpv渲染的视频其实不受此限制,但我还是加上了这个逻辑)。
至于检测桌面是否可见,主要借助了SetWinEventHook监听SYSTEM_FOREGROUND(焦点切换)、SYSTEM_DESKTOPSWITCH(桌面切换,在切换到锁屏/UAC界面时触发)、OBJECT_LOCATIONCHANGE(控件位置变化,窗口改变位置/大小时触发)事件,然后在回调函数里检查所有顶层可见窗口的大小是不是比当前屏幕区块大。
这是我第一次尝试多进程的管理模式,好在aardio的跨进程调用用起来不是很难。检测屏幕信息的库是我在开发QuickViewPic时期写的,正好派上用场了。
所以这个程序嘛,练手的成分居多。
本来只是想研究一下怎么嵌视频,然后能在小风车的基础上实现自定义文件路径,就差不多了。
结果写着写着就变成现在这样了,哈哈
最后还是希望大家测试一下,给点建议
asuka
4
点赞,跑了下virustotal,aardio是真的容易误报
Xenon
7
昨天给你发了私信,可能没看到,这里再问一遍:
使用环境具体是怎样的,请告诉我复现问题的操作,便于定位问题