Modified 7-Zip's source code to add smart extraction, automatic password list attempts, auto-opening extracted folders, auto-deleting original archives after extraction, and font settings.
修改7-Zip源码,增强它的功能,实现了智能解压、自动尝试密码表、解压后自动进入、自动删除,字体设置等.
本项目为 7-Zip 的修改增强版,旨在引入类似 Bandizip 的智能解压、自动尝试解压密码、7zFM 文件管理器功能增强、更现代的美化图标以及命令行自定义参数。
所有自定义参数均统一采用 -c(Custom)前缀,确保不与 7-Zip 原生参数冲突。
| 参数 | 英文含义 | 功能描述 |
|---|---|---|
-csmt |
Smart | 智能解压模式。若包内仅一项则直接解压;若多项则创建同名外层文件夹。 |
-csmd |
Smart Dir | 智能解压时,若包内仅一个文件(非文件夹),仍以压缩包名创建外层文件夹。 |
-cdirn |
Dir (n) | 若目标文件夹已存在,自动创建带 (n) 后缀的新文件夹。 |
-cgo |
Go | 解压完成后,自动打开/进入目标文件夹。 |
-cdel |
Delete | 解压成功后,彻底删除原压缩包。 |
-crb |
Recycle Bin | 解压成功后,将压缩包移至回收站而非永久删除。 |
-cpwd<path> |
Password | 自动尝试密码,并支持指定外部密码 .txt 文件路径。 |
适用程序:7zG.exe 7z.exe 7za.exe
实现类似 Bandizip 的无脑解压体验:
-
-csmt逻辑: -
当压缩包内只有一项(无论是一个文件还是一个文件夹)时,不额外创建外层文件夹,直接解压到当前目录。
-
当压缩包内多于一项时,自动以压缩包名称创建外层文件夹,防止文件散乱。
-
-csmd逻辑: -
当压缩包内只有一个文件(非文件夹)时,依然以压缩包文件名创建外层文件夹,其余与
-csmt一致。 -
右键菜单集成:
-
文件右键弹出菜单新增 “智能解压到此” 项,并将其移至解压系列菜单的首位。
-
该右键菜单行为受 7zFM 中
选项->解压-><智能解压时总是创建文件夹>勾选状态的控制。
在 7zFM.exe -> 工具 -> 选项 中新增 「解压」 专属标签卡,提供图形化配置(对应影响右键菜单及默认行为):
[ ] 排除重复的根文件夹(原功能移至此处)[ ] 智能解压时总是创建文件夹(映射参数:-csmd)[ ] 若文件夹已存在,则创建带(n)后缀的新文件夹(映射参数:-cdirn)[ ] 解压后打开文件夹(映射参数:-cgo)[ ] 解压后删除压缩包(映射参数:-cdel)[ ] 删除到回收站(映射参数:-crb)[ ] 自动尝试解压密码(映射参数:-cpwd)- 文本输入框与
[浏览]按钮,用于指定自定义密码txt文件路径 (映射参数:-cpwd<filepath.txt>)
为提升加密包的解压效率,引入多级密码自动轮询匹配机制:
-
命令行开关
-cpwd<filepath.txt>: -
该参数既是外部路径指定,也是功能开关。无此参数则不触发自动尝试。
-
路径支持双引号包裹,如
-cpwd"D:\My Passwords.txt"。若未指定路径或路径无效,仅作为开启密码尝试的开关。 -
密码文件读取优先级顺序:
- 首先读取 7-Zip 根目录下的
FilePasswords.txt - 其次读取
-cpwd参数指定的自定义文件 - 最后读取 7-Zip 根目录下的
passwords.txt
-
交互对话框升级(密码输入对话框):
-
新增按钮 [从文件尝试密码]:点击后立即按上述顺序轮询尝试字典文件中的密码。 (Alt+F)
-
新增按钮 [保存当前密码]:将当前输入框内的密码保存至根目录下的
passwords.txt(每行一个),不关闭对话框,不触发解压。 -
新增勾选项 [当密码正确时自动保存]:勾选后,若解压成功,会自动以
"{完整文件路径}"={密码}的格式写入根目录下的FilePasswords.txt。为了安全,默认不勾选。 -
7zFM 联动:开启后,7zFM 打开非头部加密包,点击解压、测试 或双击包内文件时均会自动尝试密码。
在 7zFM.exe 的 「文件」菜单 以及 文件列表区右键菜单 中同步增加了以下三项实用功能:
- 复制名称 (
Alt + C):将所有当前选中项的纯文件名复制到剪贴板。 - 复制完整路径 (
Ctrl + Shift + C):将选中项在压缩包内部的相对完整路径复制到剪贴板(不包含压缩包自身的磁盘路径)。
💡 举例:
压缩包路径为C:\TEMP\newdir.zip
选中包内文件:C:\TEMP\newdir.zip\multi\test1.txt
执行后剪贴板内容为:\multi\test1.txt(便于用 Everything 进行精确搜索)。
- 打开压缩包所在文件夹 (
Ctrl + S):在文件管理器中直接定位并选中当前在 7zFM 中打开的压缩包 (Show in folder)。 - 注:此项位于「属性」菜单下方,仅在进入压缩包内部时可用,未进入压缩包时显示为灰色禁用状态。
- 图标替换:替换来自 Auto7zip 的现代化美化图标。
- 字体可调:在
选项->设置界面中新增[设置字体]按钮。弹框可更改字体名称、字号大小及字形,配置实时保存于注册表。 - 动态单位列:文件列表区新增 「大小(自动)」 列。文件大小将以更友好的动态单位(
KB/MB/GB)显示,可在列头右键菜单中开启。 - 排序箭头指示:为排序列头增加了三角箭头标识,明确反映当前是正序还是逆序。
- ❌ [未能实现] 将排序列的背景色改为浅灰色
rgb(240,240,240)。 - ❌ [放弃实现] 基于
7z.ini的便携化配置文件逻辑。由于涉及修改ZipRegistry.cpp且逻辑过于复杂(需隔离命令行与 GUI 行为),该便携化功能现已放弃,配置仍统一走注册表。
读取指定的密码表以自动尝试,进行智能解压,解压成功后进入文件夹,并将原压缩包删除到回收站:
7zG.exe x -csmt -cgo -crb -cpwd"D:\密码表.txt" "C:\foobar.7z"
使用控制台版本,对包内即使只有一个文件的情况也强制创建同名外层文件夹,并在解压后自动进入:
7za.exe x -csmd -cgo -cpwd "C:\SingleFile.7z"
核心两步(PowerShell):
- ① 初始化 VS x64 编译环境
- ② 进入目标目录执行 nmake
一次性初始化编译环境
打开 PowerShell,先运行(每个新终端只需一次):
& 'C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1' -Arch amd64 -HostArch amd64 -SkipAutomaticLocation
编译 7zFM 为例:
cd "D:\7zip-src\CPP\7zip\UI\FileManager"
清理旧的编译物
Remove-Item x64 -Recurse -Force -ErrorAction SilentlyContinue
正式编译
nmake PLATFORM=x64
修改代码后 需编译以下文件:
7zFM.exe(文件管理器GUI)7zG.exe(带界面的命令行工具)7z.exe/7za.exe(纯命令行工具)7-zip.dll(右键菜单会调用)7z.dll(动态链接库)