# Duo Explorer++ **Repository Path**: ginkdu/DuoExplorerPlusPlus ## Basic Information - **Project Name**: Duo Explorer++ - **Description**: Explorer++ 增加双面板,以及对UI及功能进行深化设计。 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-29 - **Last Updated**: 2026-10-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: ExplorerPlusPlus, 文件管理器 ## README # Duo Explorer++ > 本项目是基于 [BDib/ExplorerPlusPlusNG](https://github.com/BDib/ExplorerPlusPlusNG) 的二次定制版本,在保留上游全部功能的基础上,进行了**系统性的功能增强与本地化定制**——不仅重设计了用户界面与 Fluent 图标,还新增了双面板、斑马纹、快速筛选、图标/标签尺寸配置、文件操作后台化、点击驱动器按钮跳转最后访问路径等多项功能与修复,详见下方「✨ Duo Explorer++ 修改」清单。 Duo Explorer++ 是一款轻量、快速、开源的 Windows 文件管理器,支持便携使用,是 Windows 资源管理器的绝佳替代品。 本定制版在原版基础上重点优化了视觉体验与交互效率,新增了斑马纹、可配置图标大小、快速筛选、双面板及其拖放行为配置、点击驱动器按钮跳转至最近访问路径、右键菜单复制文件/文件夹路径等多项功能。 *** ## ✨ Duo Explorer++ 修改 ### 1. 全新 Fluent 风格图标 * 使用一套 **Fluent 风格**的统一图标(位于 `Explorer++/Explorer++/res/icons/custom/`),替换了上游默认的 Windows 10 图标主题; * 更新了应用主程序图标 `Explorer++.ico`,风格统一、细节更清晰。 ### 2. 可配置的工具栏图标大小 * 针对显示 shell 图标(驱动器工具栏、应用程序工具栏)的工具栏,新增图标大小选项: * 小号(16 px) * 中号(24 px) * 大号(32 px) * 超大(48 px) * 在 **工具 → 选项 → 窗口** 界面中通过下拉框设置; * 设置值支持写入注册表或配置文件,且基于 96 DPI 存储,自动适配不同分辨率。 ### 3. 可配置的标签栏高度 * 新增标签栏**额外高度**设置(0 \~ 24 px),用于加高顶部标签,改善点击区分度与美观度; * 在 **选项 → 选项卡** 界面中输入数值; * 高度以「额外偏移」方式存储,会跟随字体大小自动调整,DPI 无关; * 输入值会自动被约束在安全范围内(0 \~ 24),从配置文件中注入的越界值也会被夹紧。 ### 4. 驱动器工作栏图标显示修复 * 修复了**部分分区(尤其是系统分区、网络驱动器)在工作栏不显示图标**的问题; * 根因:当图标尺寸与系统列表不匹配时,工具栏会拷贝系统图列表生成「缩放快照」。该快照在驱动按钮查询图标之前生成、且不随系统列表增长而更新,于是**索引较高、在快照后才被系统惰性加入的图标**(如系统分区、网络驱动器)在快照中缺失,按钮指向越界索引而显示空白; * 修复方案(位于 `ToolbarView.cpp`): * 缩放拷贝遇到空槽时补透明占位图标,保证槽位索引不偏移; * 当按钮所需的系统图标索引超出工具栏当前列表范围时,从**实时系统列表**取回图标并补入工具栏列表,同时缓存“系统索引→工具栏索引”映射,避免刷新时重复添加; * 驱动器新增 / 热插拔刷新同样走该逻辑; * 对基于 `ToolbarView` 的工具栏(驱动器、应用程序、书签)通用生效。 ### 5. 显示窗格(Display Window)优化 * **默认配色改为冰晶蓝渐变**:显示窗格背景自左上角淡冰蓝 `RGB(232,246,255)` 向四周通透水晶蓝 `RGB(150,205,238)` 平滑晕开,取代原先「白 → 深蓝」,观感更清爽协调; * **首行名称后附带完整路径**:选中单个文件或未选中项(文件夹)时,显示窗格第一行由原来的仅名称,改为「名称 `|` 完整文件夹路径」的格式,便于直接查看当前所处位置; * **默认字体高度调整**:默认字体仍为 Segoe UI,字符高度(`lfHeight`)调整为 `-15`,与本地配置实测相符。 > 配色、字体与字号均可通过 **工具 → 选项 → 显示颜色** 调整,默认值随代码一并更新。 ### 6. 双面板(Dual Pane) * **默认开启双面板**:启动即并排显示两个文件面板,无需任何命令行动作;如不需要可在 **查看 → 双窗格** 中关闭; * **左右面板相互独立**:每个面板拥有各自的标签栏与文件列表,布局为固定 **50/50 等分**,中间以 3 像素垂直分隔条分隔,可分别独立浏览不同目录; * **切换活动面板**:在指定面板内选择文件或标签时,会自动将该面板设为活动面板,显示窗格随之联动预览对应内容; * **每面板独立驱动器工具栏**:驱动器工具栏从顶部 rebar 中移出,改为**每个面板上方各设一个**(单面板模式下同样位于面板上方);点击某侧工具栏的盘符只会在**该侧面板**导航或新建标签,点哪边哪边即成为活动面板;显示/隐藏仍由 **查看 → 工具栏 → 驱动器** 统一控制,两侧同步显隐; * **状态持久化**:退出时左右面板会分别保存当前打开的标签与选中标签,下次启动自动还原,并记忆当前活动面板; * **单面板回归一致**:关闭双面板后,行为与开启该功能前的单面板模式完全一致。 ### 7. 斑马纹(交替行着色) * 在 **详细信息** 视图下,列表行交替显示白色和浅灰色背景,显著提升长列表的视觉可读性; * 交替着色仅在**非深色模式**下生效,选中行保持系统高亮色,不与斑马纹冲突; * 默认开启,可在 **选项 → 文件/文件夹** 中关闭; * 不同于网格线(默认已关闭),斑马纹采用纯背景色渲染,视觉更柔和。 ### 8. 可配置的文件图标大小 * 在 **查看 → 图标大小** 子菜单中,可选择图标视图下文件的显示尺寸: * **16 px** — 小巧紧凑 * **24 px** — 适中 * **32 px** — 大图标(默认) * **48 px** — 超大图标 * 设置对所有标签页全局生效,切换后自动刷新; * 使用 WIC(Windows Imaging Component)对系统图标进行高质量缩放,确保 24 px、48 px 等非标准尺寸清晰锐利。 ### 9. 快速筛选(Quick Filter) * 在文件列表中**直接键入任意字符**,即可即时筛选出文件名包含该文本的文件和文件夹,无需打开筛选对话框; * 筛选范围同时覆盖**文件和文件夹**(与筛选对话框仅筛文件不同); * 底部显示筛选栏,左侧为当前输入文本,右侧为匹配数/总数(如 `12/45`); * 按 **Backspace** 删除末位字符,按 **Escape** 退出筛选并恢复完整列表; * 输入停止 300 毫秒后自动执行筛选,避免频繁操作卡顿; * 快速筛选与筛选对话框互斥,激活快速筛选时自动关闭已有筛选。 ### 10. 默认配置变更 * **默认语言**改为简体中文(`LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED`); * **默认图标集**改为 `Fluent`(`IconSet::Fluent`),使用定制 Fluent 图标; * **配置存储**强制使用 XML 配置文件(`config.xml`),不再回退到注册表,确保便携一致; * **默认网格线**关闭(`showGridlines = false`),由斑马纹替代视觉分隔功能; * **默认视图**改为**详细信息**(`ViewMode::Details`); * **默认图标大小**为 **32 px**(`iconSize = 32`)。 * **默认目录变更通知模式**改为文件系统级(`changeNotifyMode = Filesystem`,虚拟文件夹自动回退 Shell 模式),详见第 12 节。 * **默认单实例**(`allowMultipleInstances = false`):再次启动时不再新建进程,而是激活已有的 Explorer++ 窗口,避免意外多开。 ### 11. 详细信息视图默认列宽自适应 * **首次显示详细信息视图时列宽自动铺满面板**:名称列宽度 = 列表面板宽度 − 其余可见列宽度之和,修改日期(150 px)、大小(85 px)、类型(170 px)、名称四列总宽恰好等于面板宽度,无横向留白或滚动条; * **对所有文件夹类型通用**:按当前文件夹的实际列集合统计其余列宽之和(普通文件夹、「此电脑」、回收站等列集合不同也能正确计算),不再依赖固定的列宽组合; * **尊重用户定制**:仅当名称列宽度未被用户调整(仍为默认值)时才应用动态宽度,用户手动改过列宽后不再覆盖; * **消除切换 / 加载闪屏**:切换视图与切换文件夹期间暂时挂起列表重绘,刷新完成后再恢复,列表不再反复闪烁; * **随面板缩放保持铺满**:名称列会在列表面板每次尺寸变化时重新计算(含窗口在启动后才手动最大化、或拖拽改变宽度等场景),使列总宽始终等于当前面板宽度,避免最大化窗口后右侧出现剩余空白。 ### 12. 目录变更监听:默认文件系统级通知(虚拟文件夹自动回退) * **默认改用 `ReadDirectoryChangesW` 文件系统级监听**(`Config.h` 中 `changeNotifyMode` 默认 `Filesystem`):任何方式创建的文件都能即时显示,无需手动 F5 刷新; * 解决了上游默认 Shell 模式(`SHChangeNotifyRegister`)的固有缺陷:该模式是被动的广播订阅机制,**只有创建文件的程序主动调用 `SHChangeNotify` 才会收到通知**。第三方程序(如 PDF 编辑器拖出页面、部分下载工具)用普通文件 API 静默直写时,文件夹视图不会更新; * **虚拟文件夹自动回退**:「此电脑」、回收站等无文件系统路径的位置创建监听失败时,自动回退到原 Shell 机制(`DirectoryWatcherFactoryImpl.cpp`),行为与上游一致,父目录删除 / 重命名检测同样保留; * 对文件夹视图、左侧目录树等所有监听点统一生效;对 NTFS / FAT32 / exFAT 本地盘及 SMB 网络盘均有效; * 资源开销可忽略:每个标签页 1 个目录句柄 + 4 KB 缓冲区,无专用线程,空转时 CPU 占用为 0; * 仍可用命令行参数 `--notify shell` 强制切回纯 Shell 模式(见 `Documentation/CommandLine.md`)。 ### 13. 左右箭头键目录导航 * **右箭头(→)进入文件夹 / 压缩包**:在文件列表中选中单个文件夹或压缩包后按右箭头键,即可在当前标签页进入该项,无需回车或双击;压缩包的打开路径与双击 / 回车完全一致(优先虚拟浏览秒进、不可用时自动降级,详见第 20 节);选中普通文件、多选或无选中时保持列表视图默认的箭头行为(移动焦点/水平滚动),互不干扰; * **左箭头(←)返回上一级**:按左箭头键直接退到上一级目录,与退格键(Backspace)行为一致; * 按住 Ctrl / Shift / Alt 时均不触发,与现有的 `Alt+←`(后退)、`Alt+→`(前进)、`Alt+↑`(向上)快捷键不冲突; * 实现位于 `ShellBrowser/ListView.cpp` 的 `OnListViewKeyDown`,对左右面板所有标签页统一生效。 ### 14. 文件操作后台化(删除 / 复制移动 / 粘贴不再卡界面) * **根因**:上游在 **UI 线程上同步调用** `IFileOperation::PerformOperations()`(`Helper/FileOperations.cpp`),该调用在操作完成前不返回。删除大容量文件夹进回收站时,shell 要枚举全部文件并做回收站簿记,主线程长时间卡在调用内,消息循环停摆,整个窗口无法操作;粘贴走的 shell `paste` 动词同理。且 UI 线程被堵期间 OLE 剪贴板跨单元封送所需的消息泵中断,其他粘贴操作也会超时失败; * **修复方案**:将删除、复制 / 移动到文件夹、粘贴(`paste` 动词)统一移到项目内置的 `ComStaThreadPoolExecutor`(STA 线程池,线程自带消息泵)上执行,配合 concurrencpp 协程 + `ResumeOnUiThread` 回 UI 线程收尾,与 `DirectoryModificationHandler` 的既有异步模式一致: * PIDL 克隆后按值传入工作线程,不借用列表项内部指针,操作期间切换目录也安全; * 删除确认框仍以主窗口为 owner 正常弹出,确认后的删除过程界面全程可操作,进度框可取消; * 删除完成后回到 UI 线程再写入撤销栈(`FileActionHandler::RecordDeletedItems`),并通过 `WeakPtr` 校验对象存活,中途关闭标签页 / 窗口不会崩溃; * **覆盖入口**:文件列表与左侧目录树的删除(Delete / Shift+Delete)、「复制到文件夹 / 移动到文件夹」、列表与目录树的粘贴(Ctrl+V); * **已知取舍**:列表视图粘贴后不再自动选中新粘贴的项(该功能依赖的 `FolderView` site 为非 agile 接口,不能跨线程调用),粘贴本身功能不受影响; * 未改动:拖放(drag-drop)、文本 / 图片等非 shell 数据的粘贴、重命名与新建文件夹等本身很快的操作。 ### 15. 撤销删除(Undo Delete)修复 * **修复现象**:删除文件到回收站后,右键空白处菜单顶部的「撤销删除」点击后无任何反应,文件不恢复,菜单项也不会消失; * **根因**:撤销时(`Helper/FileActionHandler.cpp` 的 `UndoDeleteOperation`)用删除前记录的**纯文件名**与回收站项的显示名做严格相等比较,而在较新的 Windows 版本上,回收站项的显示名返回的是**完整原始路径**(如 `C:\...\test.txt`)而非文件名,匹配永远失败,函数静默返回,撤销栈也不弹出; * **修复方案**:匹配前先用 `PathFindFileNameW` 从回收站项名字中提取文件名部分再比较——新系统(返回完整路径)与旧系统(返回文件名)两种形态均可正确匹配,文件成功恢复到原位置、原名不变。 ### 16. 双面板拖放行为配置 * **支持自定义双面板之间的拖放行为**:将一个面板中的文件拖放到另一面板的**空白区域**时,默认行为为「同盘移动、异盘复制」; * 可在 **选项 → 文件/文件夹** 中将其切换为以下模式: * **默认**:同盘移动、异盘复制; * **始终复制**:跨面板放置一律复制; * **始终移动**:跨面板放置一律移动; * **每次询问**:放置时弹出「移动到此处 / 复制到此处 / 取消」菜单,由你即时决定; * 按住 Shift / Ctrl / Alt 等显式修饰键时仍遵循系统拖放约定,不受上述配置影响; * 该设置持久化到配置文件 / 注册表,退出自动保存。 ### 17. 点击驱动器按钮跳转到最后访问路径 * **场景**:当点击驱动器工具栏中的盘符按钮打开某个驱动器(盘符根路径,如 `C:\`)时——无论是左键点击在当前标签页导航,还是中键 / Ctrl 点击(或开启「总是新标签页」)新建标签——原行为是停留在该盘符的根目录; * **新行为**:改为自动定位到该驱动器**最近访问的路径**,减少在常用子目录与盘符根目录之间的反复切换(与 Total Commander 行为一致); * **记忆范围**:路径记忆仅在当前窗口会话内有效(内存级),退出窗口即释放,不持久化到配置 / 注册表,重启程序后仍从盘符根目录开始; * **失效回退**:若记忆的路径已失效(目录被删除或盘符被移除),自动清理记忆并回退到盘符根目录,不会报错或停留在空路径; * 默认开启,可在 **工具 → 选项 → 选项卡** 中取消勾选「点击驱动器按钮时,转到该驱动器最后访问的路径」以关闭。 ### 18. 滚轮切换标签页 * **悬停在标签栏上滚动滚轮,即可前后切换当前面板的激活标签页**:向前滚 → 下一个标签,向后滚 → 上一个标签,环形循环(从最后一个再滚到第一个),与 Ctrl+Tab 走同一条切换路径; * **无需点击、无需焦点**:光标悬停在标签栏上即可生效,即使当前焦点在其它控件;双面板下落在哪个面板的标签栏上就切哪个面板的标签; * **与溢出滚动自动分流**:当所有标签都可见时滚轮用于切换标签;当标签过多、标签栏出现溢出箭头时,滚轮保持原有的水平滚动标签条行为,两种场景互不干扰; * 一次滚动多格则逐格切换。 ### 19. 右键菜单复制文件 / 文件夹路径 * **右键文件** → 右键菜单「打开」之后新增「复制文件路径」,一键复制该文件的完整路径(如 `D:\test\file.txt`); * **右键文件夹** → 「打开」「在新标签页中打开」之后新增「复制文件夹路径」,一键复制该文件夹自身的完整路径(如 `D:\test\sub`); * **多选支持**:多选同类项时复制全部所选路径(每行一个);文件与文件夹混合选择时两项同时显示,各复制对应类型的路径; * 路径格式与「文件」菜单中的「复制文件路径」一致(解析路径、换行分隔、不加引号); * 菜单项紧跟在系统「打开」「在新标签页中打开」(后者仅单选文件夹时显示)之后、独立成组,紧随打开操作、单击即达;已同步全部 30 种语言界面。 ### 20. 双击压缩包直接打开(内置 7-Zip 虚拟浏览) * **双击 / 回车即可像打开文件夹一样进入压缩包,秒级打开、零落盘**:程序通过进程内虚拟文件夹(免注册、便携化设计)直接读取压缩包头部元数据,把包内内容当作普通目录展示——与 Total Commander / Double Commander 的虚拟浏览模式一致,不再整包解压到磁盘; * **按需解压**:双击包内某个文件时,仅将**该文件**解压到 `%TEMP%\DuoExplorer++VFS\` 临时目录并打开;不会为了看一眼而解压整个压缩包,大包 / 网络盘上的压缩包也能即时进入; * **完整列表信息**:大小、修改日期等列直接来自压缩包元数据,排序、分组均正常;图标与类型名按扩展名自动匹配; * **支持格式**(由内置 7-Zip 解码器决定):`.7z` `.rar`(含 RAR5)`.zip` `.tar` `.gz` `.tgz` `.bz2` `.xz` `.z` `.lzma` `.wim` `.iso` `.arj` `.lzh` `.rpm` `.deb` `.cpio` `.dmg` `.vhd` `.vmdk` `.jar` `.cbz` `.cbr` `.cb7` 等 40 余种;**zip / cab 同样优先走虚拟浏览**——Windows 自带的 zip 浏览组件对超大、多条目压缩包(如数万文件的 ZIP64 大包)可能需要数分钟才能列出内容,而内置 7-Zip 引擎同等场景下零点几秒即可进入;虚拟浏览不可用时 zip / cab 自动回退系统自带浏览机制,其余格式按下方降级链处理; * **默认开启**:可在 **工具 → 选项 → 文件和文件夹** 中通过「在 Duo Explorer++ 中打开容器文件」复选框关闭;关闭后压缩包恢复调用系统默认程序打开; * **加密压缩包**:进入或打开加密压缩包时会弹出密码输入框(各语言已本地化),密码错误会重新提示,直到成功或取消;同一压缩包本次会话内只需输入一次; * **自动降级链**:虚拟浏览不可用(格式不支持 / 文件读取失败)→ 内置 7-Zip 命令行全量解压(进度可取消)→ 连 7-Zip 都找不到时回退系统默认方式打开,保证任何情况下都能打开压缩包; * **全量解压回退路径**(自动触发时):解压到 `%TEMP%\DuoExplorer++\` 下以压缩包名 + 哈希命名的子目录,解压耗时超过约 0.3 秒显示进度对话框(可取消),解压期间主窗口暂时禁用;退出程序(含系统注销 / 关机)自动清理全部临时目录,若解压仍在进行会先终止 7z.exe 再删除; * **尊重打开方式**:当前标签页 / 新标签页(Ctrl+双击)/ 新窗口等行为与普通文件夹一致,双面板下在活动面板打开;文件列表双击 / 回车 / 右箭头键、地址栏输入路径、文件夹树选中或展开压缩包等入口行为统一;**包内键盘导航与普通目录完全一致**——文件列表中右箭头键进入选中的子文件夹 / 子压缩包,左箭头键或 Backspace 逐级返回上一级(到达压缩包根后再返回其所在文件夹);文件夹树中右箭头展开 / 进入压缩包及其子目录,左箭头折叠或返回上级;前进 / 后退历史均正常(基于 PIDL 实现); * **只读浏览**:包内内容为只读展示,增删改不会回写到压缩包本身; * **便携化设计**:虚拟文件夹完全在进程内实现,不写入注册表、不注册任何系统组件、无独立 DLL,配置文件便携模式与绿色分发完全兼容; * **包内右键菜单 / 复制 / 拖拽**:右键包内文件可选择「打开」(仅解压该文件并打开)与「复制」(按需解压后放入剪贴板),可直接粘贴或拖拽到其他面板 / 资源管理器;文件夹的复制会按需解压其全部内容并保留目录结构; * **已知限制**:包内为只读浏览(不支持重命名 / 删除 / 移动 / 粘贴进包);配置文件(XML)模式下包含压缩包内容的标签页在重启后恢复为默认目录(注册表模式可完整恢复); * **版权说明**:7-Zip 版权信息已加入「帮助 → 关于」窗口(含版本号与官网链接)及第三方致谢列表:7-Zip Copyright (C) Igor Pavlov,GNU LGPL + unRAR restriction,https://www.7-zip.org/;许可证文本随程序分发(`7-Zip\License.txt`); * **安全注记**:全量解压回退路径中密码通过命令行参数传递给 7z.exe,会在本机进程列表中短暂可见(与多数 GUI 压缩工具一致);虚拟浏览路径中密码仅在内存中使用,不出现在命令行;7z.exe 的标准输入已接空设备(NUL),加密包未提供密码时会立即失败而不是无限等待密码输入。 *** ## 🔧 原版核心特性 * **完全便携**:配置可保存在注册表或配置文件(支持带参数的配置文件),免安装即可使用 * **标签式浏览**:方便地管理多个文件夹 * **文件预览**:选中文件时在显示窗格中实时预览 * **易记的快捷键**:快速导航 * **可自定义用户界面** * **完整拖放支持**:可与包括 Windows 资源管理器在内的其他应用交互 * **高级文件操作**:支持文件合并与拆分 * **修改文件日期与属性** * **保存目录列表** * **书签标签** * **搜索**:按文件名与属性搜索 * **多种视图**:图标、列表、详细信息、缩略图、平铺视图自由切换 * **文件筛选** * **ARM64 支持** * **现代化构建系统**:支持 WiX v5 与 CMake *** ## 🚀 构建 ### 获取源码 ```bash git clone https://gitee.com/ginkdu/DuoExplorerPlusPlus.git ``` ### 使用 PowerShell(推荐) 运行脚本 `.\build.ps1` 可一键构建多平台 / 多配置版本: ```powershell # 构建全部平台与配置(默认) .\build.ps1 # 仅构建指定平台/配置 .\build.ps1 -Platforms x64 -Configurations Release # 清理 BIN 目录 .\build.ps1 -Clean ``` 参数说明: * `-Platforms`:`x64` / `Win32` / `ARM64`,默认三者全构建; * `-Configurations`:`Release` / `Debug`,默认两者全构建; * `-Clean`:构建前清理 `BIN` 目录。 ### 快速迭代脚本 如需快速验证代码改动,可用 `build-x64-release.bat`: ```bat build-x64-release.bat fast rem 仅构建主程序(推荐,速度快) build-x64-release.bat rem 全量构建(含约 30 个翻译 DLL) ``` ### 使用 Visual Studio * 打开 `Explorer++\Explorer++.sln` 直接构建; * 产物输出到 `BIN\` 目录。 ### 使用 CMake ```bash mkdir build cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=C:/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake cmake --build . ``` *** ## 📦 目录结构 ``` Explorer++ ├── Explorer++/ # 主程序工程 │ └── Explorer++/res/icons/ │ ├── custom/ # 本定制版的 Fluent 风格图标(新增) │ └── windows-10/ # 上游默认图标(已由 custom 替换) ├── Plugins/ # 插件 ├── Translations/ # 多语言翻译 ├── Scripts/ ├── Documentation/ ├── build.ps1 # 一键构建脚本 └── build-x64-release.bat # 快速构建脚本 ``` *** ## 📄 文档 上游在线文档:[Read the Docs](https://explorerplusplus.readthedocs.io/en/latest/) *** ## 🙏 致谢 本项目基于上游 [BDib/ExplorerPlusPlusNG](https://github.com/BDib/ExplorerPlusPlusNG) 修改,原作者及所有贡献者: * David Erceg * Google/Jules * B Dib * 以及其他所有上游贡献者 *** ## 📃 许可证 上游 Explorer++ 采用 GPL-3.0 许可证。本定制版继续遵循相同的开源许可证发布,详情请见 `LICENSE`。