☰
在 Windows 11 上找回 Windows 10 任务栏、开始菜单和 Alt+Tab:ExplorerPatcher 完整机制拆解与上手指南
2026/10/4 4:27:22 网站建设 项目流程

在 Windows 11 上找回 Windows 10 任务栏、开始菜单和 Alt+Tab:ExplorerPatcher 完整机制拆解与上手指南

【免费下载链接】ExplorerPatcherThis project aims to enhance the working environment on Windows项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher

升级到 Windows 11 后,不少人最想念的是三样东西:居中的 Windows 10 任务栏、Windows 10 风格的开始菜单,还有那个顺手的 Win10 版 Alt+Tab 切换器。ExplorerPatcher就是干这件事的开源免费工具——它不装第二套桌面环境,而是往explorer.exe(Windows 11 的外壳进程,任务栏、开始菜单、资源管理器全住在里面)注入一个 DLL,通过一组内联 Hook(Inline Hook:在目标函数开头插入跳转指令,把调用"劫持"到自己的代码里)把界面行为"偷梁换柱"回 Win10 的样子。本文先带你三步跑起来,再拆它的 Hook 架构、稳定性代价与扩展机制。

快速上手:三步见到 Windows 10 任务栏

👇 普通用户不需要编译,直接走安装包路线:

  1. 从项目 Releases 页下载最新安装程序:Intel/AMD 机器选ep_setup.exe,骁龙(Snapdragon)ARM64 机器选ep_setup_arm64.exe
  2. 双击运行,它会自动请求管理员权限,期间会关闭explorer.exe再装回文件——桌面短暂消失属正常现象
  3. 装完桌面回来了,任务栏已经变成 Win10 样式。右键任务栏选"属性",即可分别切换:任务栏样式(Taskbar 区)、开始菜单(Start menu 区)、窗口切换器(Alt+Tab)样式

开发者想改代码,才需要动仓库:

git clone https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher cd ExplorerPatcher git submodule update --init --recursive

子模块里有 5 个关键依赖:符号解析库libs/libvalinet、窗口特效库libs/sws、libs/zlib、独立的 DWM 扩展ep_dwm,以及翻译仓库ExplorerPatcher-L10N。之后在 Windows 上运行 BuildDependenciesRelease.bat 拉取 NuGet 依赖(包括 Hook 库 SlimDetours),再用 Visual Studio 打开 ExplorerPatcher.sln 编译即可。

卸载与更新都有正规渠道:ep_setup.exe /uninstall卸载(官方兜底方案是把安装程序改名为ep_uninstall.exe再运行);更新走内置机制——ExplorerPatcher/updates.cpp 用 WinRT 的 Toast 通知提示,在"属性 → Updates"里一键安装。

机制拆解:一个 DLL 如何"重装"外壳

整个过程可以拆成三件事,按顺序发生:

第一步:装东西。安装程序 ep_setup/ep_setup.c 从内嵌的压缩包里解出核心文件(用 zlib/minizip 解包,DLL 本体还套了一层 Rijndael/AES 加密,见同目录的rijndael-alg-fst.c),然后写入系统目录。

第二步:注入 explorer.exe。Windows 11 把原来分散在explorerframe.dll、TwinUI里的壳界面合并进了 explorer 进程,所以只要注入这一个进程,就能同时接管任务栏、开始菜单和资源管理器。

第三步:Hook 生效。Hook 底座在 ExplorerPatcher/hooking.h:它保留了一套类似 funchook 的funchook_prepare/install接口,但funchook_prepare的实际实现已换成 SlimDetours 的SlimDetoursInlineHook——CHANGELOG.md 明确记录了这次换库,动机是修复 ARM64 上与第三方 Hook 工具(如 Windhawk 系 Mods)的CreateWindowExW冲突,以及一个"Hook 后必须重启才稳定"的崩溃。

真正的难点是"去哪 Hook":外壳的接口全是私有函数、无公开签名,而且每个 Windows 构建(build)地址都可能变。项目的解法是运行时用PDB 符号解析(libs/libvalinet,ExplorerPatcher/dllmain.c 顶部就 include 了valinet/pdb/pdb.h)按符号名找到函数真实地址,从而跨版本工作。

核心开关全部集中在dllmain.c(1.3 万行)开头的一批全局变量上,每一项对应"属性"面板里的一个选项:

开关变量作用
bHookStartMenu是否用 Win10 开始菜单替换 Win11 版
dwTaskbarAl/ 任务栏相关任务栏对齐与样式
bCenterMenus/bSkinMenus/bSkinIcons系统菜单居中 / 菜单 Win10 皮肤 / 图标皮肤
dwAltTabSettingsAlt+Tab 切换器样式
bEnableArchivePlugin恢复"发送到 → 压缩(zipped)文件夹"等归档菜单(ExplorerPatcher/ArchiveMenu.c)
bHideExplorerSearchBar隐藏资源管理器搜索栏(ExplorerPatcher/HideExplorerSearchBar.c)

设置改动不需要重启:ExplorerPatcher/SettingsMonitor.c 监听系统设置变更,把新值实时刷进各模块。各功能模块分工如下:

模块目录职责
核心补丁器ExplorerPatcher/主 DLL:Hook 注册、任务栏(TaskbarCenter.cpp、Taskbar10.cpp)、Alt+Tab(InputSwitch.cpp)、开机声(StartupSound.cpp)
Win10 开始菜单ep_startmenu/完整独立实现(ep_sm_main.c),不走 Win11 的 XAML 渲染
属性面板ep_gui/右键"属性"设置界面(GUI.c)
天气组件ep_weather_host/独立 COM 服务器加载天气网页(ep_weather.c),接口定义在ep_weather_host.idl
DWM 扩展ep_dwm/窗口特效增强,单独跑在ep_dwm_svc.exe服务进程里
插件ep_extra/、ep_extra_valinet.win7alttab/扩展点,如 Win7 风格 Alt+Tab

常驻 Hook 的性能与稳定性代价

这类项目没有 benchmark 可贴(仓库内无基准数据),但成本结构很清晰,值得讲透——Hook 挂在 explorer.exe 的热路径上:每次任务栏重绘、每次点开开始菜单、每次 Alt+Tab 都会穿过被改写的函数入口。外壳进程还是"单点故障":它一崩,桌面直接没了。项目的缓解手段都能在仓库里找到出处:

  1. Hook 库换代。SlimDetours 的 trampoline 内联 Hook 单次开销就是多一条间接跳转;CHANGELOG.md 中这次替换还顺手修掉了 ARM64 上的兼容性问题,属于"稳定性驱动"的换库而非性能优化。
  2. 减少运行时解析风险。新版本中ep_taskbar改为自己静态链接所用的私有函数,少一层动态查找(CHANGELOG 条目 "Now statically links to private functions")。
  3. 进程隔离,别让外设拖垮宿主。天气组件是独立 COM 服务器(ep_weather_host_stub/里有.idl和.def导出定义),页面挂了不连累 explorer;DWM 扩展独立成ep_dwm_svc.exe服务——CHANGELOG 里还特意把它改名以绕过 24H2 的升级拦截,可见这条隔离线维护得多用心。
  4. 版本对版本。version.h 的VER_MAJOR 26100直接对应 Windows 构建号,每个 EP 版本发布时都声明 "Tested on OS builds …",把"哪个 EP 适配哪个 Windows"写成显式契约,避免用户盲目混搭。

部署与扩展:适配范围、翻译与插件

适配范围:Windows 11 22H2 / 23H2 / 24H2 及更新的 26xxx 构建,x64 与 ARM64 双架构。README 提醒"部分功能在部分 Windows 版本上不可用",属常态而非 bug。

扩展方式按成本从低到高:

  • 换语言:翻译放在ExplorerPatcher-L10N子模块里维护(CHANGELOG 记录过新增捷克语、西班牙语的提交),本地化不侵入主仓库。
  • 加插件:ep_extra/提供加载框架(worker.c + main.asm),独立的 Win7 风格 Alt+Tab(ep_extra_valinet.win7alttab/)就是按这个模式做的样板。
  • 加功能:直接在dllmain.c里照葫芦画瓢——新增一个全局开关变量 + 一对 Hook 函数 + SettingsMonitor 里的刷新路径,就是项目内每个功能的统一套路。

适用场景判断:个人 PC 是它的主场;企业域环境谨慎使用——它修改系统外壳进程,可能触发软件管控策略;云电脑/VDI 场景务必锁定 EP 版本,防止 Windows 自动更新后行为漂移。

避坑指南:三个最常见的坑

🛠坑一:Windows 更新后界面失效或闪退。EP 与构建号强绑定,先翻 CHANGELOG.md 顶部的 "Tested on OS builds" 列表,把 EP 升到覆盖你当前 build 的版本,别用旧版硬扛新系统。

🛠坑二:新开始菜单特性标志与 EP 任务栏冲突。这是 CHANGELOG 里白纸黑字的已知问题:22H2/23H2 上开启 Windows 11 新开始菜单 feature flag 时,搭配 EP 任务栏会让explorer.exe陷入崩溃循环。解法:关闭该特性标志,或换任务栏样式。

🛠坑三:与别的 Hook 工具叠用。ARM64 上同时使用 Windhawk 系 Mods(尤其 HookCreateWindowExW的)可能冲突——这正是项目换 SlimDetours 的起因之一。遇到崩溃先升级 EP,再检查其他 Mod 的加载顺序。

结语

ExplorerPatcher 的本质,是用运行时 Hook 把 Windows 11 的外壳"逆向着装"回 Windows 10 的样子——能力上几乎零成本,代价是要跟着 Windows 每次更新持续适配。

  • 研究型读者:顺着 hooking.h →libs/libvalinet的符号解析 →dllmain.c里按构建号分支的适配代码这条线读,再看它的版本发布节奏(每版 CHANGELOG 就是 Hook 点漂移的活档案),是学习"私有 API Hook + 符号解析 + 跨构建兼容"三件套的罕见完整样本。
  • 工程型用户:先锁版本、确认稳定,再按需逐项开启功能开关;企业环境请先在虚拟机里完成一轮回归,再谈铺开。

【免费下载链接】ExplorerPatcherThis project aims to enhance the working environment on Windows项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询