开发低资源占用Windows Shell替换程序 如何让窗体始终保持在所有窗口底层?
Windows Shell替换程序固定桌面底层低开销实现方案
核心实现方案(无额外运行时开销)
所有操作仅需在程序初始化时执行一次,无需后台轮询、钩子,几乎不增加额外CPU/RAM占用:
- 首先调用
FindWindowW(L"Progman", L"Program Manager")获取Windows默认桌面管理器窗口句柄 - 调用
SetParent(你的应用窗口句柄, 上述获取到的Progman句柄),将你的窗口设置为桌面窗口的子窗口,天然会处于所有顶层应用窗口下方,不会被常规窗口激活操作带到前台 - 可选补充调用
SetWindowPos(你的应用窗口句柄, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE),强制锁定窗口到Z序最底部
Win10/11适配方案
针对新版系统中存在WorkerW窗口承载壁纸的场景,仅需多执行一次单次枚举操作:
- 调用
EnumWindows枚举所有顶层窗口,匹配类名为WorkerW且包含类名为SHELLDLL_DefView子窗口的目标句柄,将你的窗口父级设置为该WorkerW句柄即可
高开销方案规避
不要使用全局鼠标钩子监听桌面点击、不要设置定时器循环调用压入底层的API,上述两种方案都会产生持续的额外CPU占用。
异常兼容处理
如果遇到资源管理器explorer崩溃重启的场景,仅需监听系统WM_SETTINGCHANGE消息,收到桌面重置的通知后重新执行一次父窗口绑定操作即可,该触发为系统消息推送,无需轮询,开销可忽略。
内容的提问来源于stack exchange,提问作者Games_Crack
相关产品推荐
相关产品推荐

