编写Windows动态壁纸(关于Windows10桌面的了解)(一)

您所在的位置:网站首页 window10壁纸动态 编写Windows动态壁纸(关于Windows10桌面的了解)(一)

编写Windows动态壁纸(关于Windows10桌面的了解)(一)

2023-08-11 10:53| 来源: 网络整理| 查看: 265

一、杂言

作为一个编程爱好者,同时,也作为一个宅。电脑几乎是每天都必须碰上几个小时的。对于Win10的桌面,自己的心中多多少少也希望能好看一点。市面上有很多桌面美化软件,但基本都不符合我的心意,有美化的没整理功能,有整理功能的没美化。秉承着对电脑的爱好之心,还是自己动手,丰衣足食吧(无奈脸)。

(然并卵,虽然市面上有这么多的桌面整理和美化软件,而能查到得的资料却少到可怜。也许国外比较多。)

 

二、正题

先来了解一下win10的桌面底层。

用按键精灵的抓抓或者是spy++观察一下桌面上的窗口。

在这幅图中,SysListView32和SHELLDLL_DefView是管理和显示桌面图标的。Progman是显示出来的总桌面,也是总程序,如果你向Progman窗口发送一个WM_CLOSE消息,Windows就会提醒你是否要关机。

我们先试着单独隐藏一下Progman窗口。

然后,整个窗口就黑了。这说明,Progman的确是总桌面。

我们再试着单独隐藏一下SHELLDLL_DefView窗口。

桌面的图标就不见了,这说明SHELLDLL_DefView是负责显示桌面图标的。

而关于SysListView32,这个窗口是控制桌面图标的排列顺序的,如果要加上桌面整理功能的话,可能要用得上它。

通过以上的演示,我们发现,在Windows中,桌面壁纸的显示和图标的显示是分开的。我们可以利用这一特性(win7和win8是没有的),来实现动态壁纸。因为我们只要将我们的程序插入到壁纸和图标之中,就可以想显示什么就显示什么了。

但是,这里要打一下茬,因为,Win10有一个多桌面的功能。但凡只要一按下这个按钮:

Windows的桌面底层就变成这个样子。

一看,SysListView32、SHELLDLL_DefView窗口和Progman窗口分 家 了。而且还多了WorkerW窗口出来,而且不止一个。当初我也很奇怪,怎么就变成这个样子了。后来翻翻资料。其实,多一个WorkerW窗口是为了在切换桌面时能平滑过渡,而不是一闪一亮式的切换创建的。只要你把下面那一个没有子窗口的WorkerW关闭了,你就能体验到什么叫生硬的桌面切换。

其实这个样子,还是能够利用win10桌面的特性来达到我们的目的。但多少会造成影响(后面会说解决方法)。这里多说一句,我也不知道为什么,WorkerW其实是有很多的,如下:

这是我写的一个小程序找出来的WokerW窗口的数量和句柄,我也不知道这么多有什么用。

 

三、编写代码

Progman是显示壁纸的,我们只要把自己的窗口放在它之前就得了,就是把自己的窗口设立为Progman的子窗口。要注意隐藏没有子窗口的WorkerW窗口,它负责平滑过渡,也就是说它在Progman的前面绘制,我们必须隐藏它,才能正常显示我们的窗口。

上代码(正论)

#include #include #include //与桌面相关的窗口句柄 HWND SysListView32 = nullptr; HWND SHELLDLL_DefView = nullptr; HWND WorkerW = nullptr; HWND Program = nullptr; //报告错误 void Error(const char* _error,const char* _from) { std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3