更新:2018/08/31 WS_MOUSE_LL 钩子,实现底层壁纸交互效果。

一、介绍

国内玩家第一次看到动态壁纸,都是出于一款来自 Wallpaper Engine 的 Steam 程序。它允许将视频、窗口小部件、甚至是有一定交互的网页放置到桌面最下方,2016 年初,被b站up主们广泛传播,被大家熟知。Miku

原理其实并不难,然而...

前端程序员A:这个 WebGL 特效我能吹一年,赶紧做成壁纸,...什么要写C++的?不可能的,一辈子都不会写中级语言的。

c/c++程序员B:靠...,这帮刁民又想骗我做设计。

Wallpaper Engine 成功的原因是赢在了稳定性、兼容性和玩家老哥组成的丰富的创意工坊。

这种壁纸小程序,Github上还没有Python 的实现,但是核心方法仅仅是操作win32api,python完全可以实现,你听说过pywin32吗。。。看完这篇教程,你可以做第一个。

假如你不想了解原理,前端程序员可以直接移步第三步。

二、实现原理

本篇文章意在讲解原理,你可以把它当成一个前端程序员的小工具,可能无法达到商用程度。监听底端事件,容易造成 windows消息堵塞

占用大量内存(等于是多挂起了一个浏览器)

无法兼容关闭aero的win7 和 win8

原理:windows 最底层的窗体 Program Manage (如图所示),想要你的窗体出现在桌面icon后面,只需要把自己的窗体作为 Program Manage 的子窗体,然后隐藏原先的壁纸层就可以了,win10 你可以选择在原先壁纸之上和icon之下的位置(可以省略隐藏原壁纸),但这种是兼容win7和win10的做法。

你可以使用 Visual Studio的 Spy++来查看 Window的窗体。

我们现在知道了,workerw 作为我们的图标和壁纸(灰色的workerw,因为已经隐藏)的父窗体出现在底层窗体之上。

博主你又骗我,为什么我的电脑上,只有一个WorkerW,图标和壁纸都黏在一起了?

这是一条神奇的 message,是 windows 为了解决切换壁纸的时候丑陋的闪切而创建的(未公开消息),它使得更换壁纸的时候有一个平滑的过渡但又不影响绘制壁纸,它会分离创建两个 WorkerW,我们只需要隐藏没有 SysListView (用于存放桌面 icon 的窗体) 的那一个就可以了。

那么接下来,你需要做的就是用winapi遍历找到窗体,完成任务了:

#include

HWND _workerw = nullptr;

inline BOOL CALLBACK EnumWindowsProc(_In_ HWND tophandle, _In_ LPARAM topparamhandle)

{

HWND defview = FindWindowEx(tophandle, 0, L"SHELLDLL_DefView", nullptr);

if (defview != nullptr)

{

_workerw = FindWindowEx(0, tophandle, L"WorkerW", 0);

}

return true;

}

HWND Utils::GetWorkerW(){

int result;

HWND windowHandle = FindWindow(L"Progman", nullptr);

SendMessageTimeout(windowHandle, 0x052c, 0 ,0, SMTO_NORMAL, 0x3e8,(PDWORD_PTR)&result);

EnumWindows(EnumWindowsProc,(LPARAM)nullptr);

ShowWindow(_workerw,SW_HIDE);

return windowHandle;

}

你的窗体需要:

SetParent((HWND)view->winId(),Utils::GetWorkerW());

还是不明白?

为什么 win8 和 win7(关闭areo)不能使用这种方法?

这种情况下,SysListView 被直接当做了 Program Manager 的子窗体,但是这并不是关键,关键是壁纸和图标融合在了一起,无论你把你的窗体放到上面位置,都不可能出现在原壁纸与icon 中间。

三、然而这是一个前端 Demo

可以使用以下两种方式设置壁纸:本地路径

线上URL(可以copy别人的demo地址)

假如你是双屏的可以设置三种屏幕布局:主屏

侧屏

平铺(延展至多屏)

2018/08/31更新:

使用 WS_MOUSE_LL 钩子,实现底层壁纸交互效果。

壁纸程序使用的是QT的 WebEngine(5.8),chrome 内核浏览器,相当于在屏幕后面挂起了一个浏览器,也就是说 chrome 能做的,它都可以实现,css3动画,webGL,背景音频 + 音频可视化等,自带了一个粒子动画的demo。粒子动画(自带)

three.js

three.js水中泡泡(自带)涟漪效果(自带)

多屏效果:桌面动态壁纸,藤蔓无限延展https://www.zhihu.com/video/989595727609225216

Github 项目链接:NoisyWinds/Wallpaper​github.com

参考资料:https://www.codeproject.com/Articles/856020/Draw-Behind-Desktop-Icons-in-Windows-plus​www.codeproject.com

欢迎点赞评论,关注后续文章,一起交流学习。

python实现动态壁纸_如何实现一个 windows 桌面动态壁纸相关推荐

  1. 苹果5壁纸_抖音超火的桌面时钟壁纸,不仅酷炫还能报时

    技能:时钟壁纸 难度系数:2颗星 适用系统:安卓 哈喽大家好,你们的壁纸小达人--小雷,又上线啦! 今天给大家推荐的是一款酷炫的桌面时钟壁纸,时钟以点状式线条组成,每过1秒,就会有一个红点,非常有趣. ...

  2. 人工桌面Nova (N0vaDesktop),一款非常可爱的二次元小姐姐主题Windows桌面动态壁纸软件

    人工桌面nova (N0vaDesktop)是一款非常可爱的二次元小姐姐主题Windows桌面动态壁纸软件.桌面工具,支持个性化化妆.互动.换装,喜欢二次元主题动态桌面应用的小伙伴千万不要错过哦,可爱 ...

  3. 高清精美壁纸:2013年9月桌面日历壁纸免费下载

    按照罗马旧历,March 为第一个月,September 就是第七个月.September 这一名称源自意为"七"的拉丁文 septem.当罗马人采用了儒略历之后,他们保留了原先的 ...

  4. 高清精美壁纸:2013年6月桌面日历壁纸免费下载

    June(六月)一种传说来源于 Junius 这个拉丁字族姓:另一种说法是根据女神 Juno 的名字命名的.6月是一年中最热季节的开始,大家注意防热避暑. 这篇文章的主题是壁纸,继续向大家分享一批精美 ...

  5. 高清精美壁纸:2013年4月桌面日历壁纸免费下载

    阳春三月,草长莺飞,又到一年春花烂漫时.在这个美好的日子里,我为大家收集了一批非常精美的2013年4月桌面日历壁纸,供大家免费下载.这些高清日历桌面壁纸用在桌面上非常方便实用,赶紧为你的桌面换换装吧! ...

  6. 使用C++代码创建一个Windows桌面应用程序

    下面六星教育整理使用C++代码创建一个Windows桌面应用程序,供大家学习参考. WinMain函数 Windows应用程序的唯一程序入口. 函数原型 int WINAPI WinMain { HI ...

  7. 精美高清壁纸:2013年1月桌面日历壁纸免费下载

    逃过2012世界末日,我们迎来了崭新的2013年.这篇文章收集了12张高清的2013年1月桌面日历壁纸,供大家免费下载.桌面日历壁纸是电脑桌面所使用的背景图片,让我们的电脑看起来更漂亮,更有个性,还可 ...

  8. 高清精美壁纸:2013年3月桌面日历壁纸免费下载

    过完中国传统的农历新年,大家又开始奔波忙碌了.令人期待的2013年3月桌面日历壁纸新鲜出炉,供大家免费下载.高清日历桌面壁纸可以直接在桌面上看到某一天所对应的星期,并且还含农历哦,非常方便实用,赶紧为 ...

  9. 高清精美壁纸:2013年5月桌面日历壁纸免费下载

    一年一度的五一国际劳动节不知不觉又到了.在这个美好的日子里,我收集了一批精美的2013年5月桌面日历壁纸供大家免费下载.这些高清日历桌面壁纸都是精心挑选的,赶紧为你的桌面换换装吧! 您可能感兴趣的相关 ...

  10. python文件运行哪一个_如何使一个python文件运行另一个?

    本问题已经有最佳答案,请猛点这里访问. 如何创建一个python文件来运行另一个? 例如,我有两个.py文件.我想运行一个文件,然后让它运行另一个.py文件. docs.python.org / / ...

最新文章

  1. 使用Python,OpenCV+OCR检测护照图像中的机器可读区域(MRZ Machine-Readable Zones)
  2. Linux crontab 命令格式
  3. Redis学习(3)-redis启动
  4. js 函数定义的方式
  5. android仿苹果SwitchButton效果的实现
  6. 路径包含空格_5分钟学会:矢量工具与路径-编辑路径
  7. 没有qpress_关于网站没反应的阿里云帮助中心问题解答
  8. 实验7.3 字符串 7-5 查找指定字符
  9. react中实现异步请求的方法一,react-thunk
  10. pfile文件怎么恢复格式_回收站清空的文件怎么恢复?值得收藏的恢复方法
  11. Win7设置自环的方法(网卡终结器)
  12. JZ The First Day 总结
  13. 856. Score of Parentheses
  14. FPGA 独立按键消抖
  15. 微型计算机原理与接口技术马静答案,微机原理与接口技术(马静)
  16. python将图片转换成手绘_利用Python生成手绘效果的图片
  17. 百家号素材审核规范说明
  18. 网页设计配色应用教程之各种色彩对比分析
  19. 红帽子linux硬盘安装教程,XP下硬盘安装RedHat Enterprise Linux 5.5图文教程
  20. perl和python各自擅长的领域

热门文章

  1. [通用]汉字按照拼音字母排序
  2. eXtremeComponents使用总结--1(转载)
  3. RubyOnRails终极部署
  4. UEditor编辑器保存数据到数据库
  5. 「津津乐道播客」#288 编码人声:只拿副业来赚钱,你可能亏大了
  6. Windows10+VS2019+OpenGL安装配置详解
  7. M1 Pro MacBook Pro下载Android11源码
  8. Unix网络编程开篇
  9. interview-db
  10. [matlab数字图像处理10]对一副图像进行二值化,ostu算法等