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 文件管理器功能增强、更现代的美化图标以及命令行自定义参数。
为避免参数混淆,且符合7z自身参数的简短风格,给自定义参数统一加上 c 前缀,意为 custom
(7z 目前还没有以-c开头的参数,所以用-c为前缀不会产生混淆)
| 参数 | 英文含义 | 功能描述 |
|---|---|---|
-csmt |
Smart | 智能解压模式。若包内仅一项则直接解压;若多项则创建同名外层文件夹。 |
-csmd |
Smart Dir | 智能解压时,若包内仅一个文件(非文件夹),仍以压缩包名创建外层文件夹。 |
-cdirn |
Dir (n) | 若目标文件夹已存在,自动创建带 (n) 后缀的新文件夹。 |
-cgo |
Go | 解压完成后,自动打开/进入目标文件夹。 |
-cdel |
Delete | 解压成功后,彻底删除原压缩包。 |
-crb |
Recycle Bin | 解压成功后,将压缩包移至回收站而非永久删除。 |
-cpwd<path> |
Password | 自动尝试密码,支持指定外部密码 .txt 文件路径。 |
-cpm<path> |
Password Match | 自动尝试密码,并将匹配的 "{filepath}"={password} 记入FilePasswords.txt |
(-cdel -crb 一起使用时,是删除到回收站)
适用程序: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>: -
给 7zG.exe / 7za.exe / 7z.exe 增加命令行参数:-cpwd<filepath.txt>
-
-cpwd 也作为开关,无它则不自动尝试密码,有它 无论指定的txt路径是否有效,都会自动尝试密码。
-
路径支持双引号包裹,如
-cpwd"D:\My Passwords.txt"。若未指定路径或路径无效,仅作为开启密码尝试的开关。 -
-cpwd 后紧跟路径,不要有空格
-
密码文件读取优先级顺序:
- 首先读取 7-Zip 根目录下的
FilePasswords.txt→ 每行一个 "{完整文件路径}"={密码}。 - 其次读取
-cpwd参数指定的自定义文件 (未指定或路径无效 则仅作开关) → 每行一个密码 - 最后读取 7-Zip 根目录下的
passwords.txt→ 每行一个密码
-
密码输入对话框增强:
新增按钮 [从文件尝试密码]:点击后立即按上述顺序尝试txt中的密码,7zG等执行解压 / 7zFM则打开压缩包 (Alt+F) 。 新增按钮 [保存当前密码]:将当前输入框内的密码保存至根目录下的passwords.txt(每行一个),不关闭对话框,不触发解压。
新增勾选项 [当密码正确时自动保存]:勾选后,若解压成功,会自动以"{完整文件路径}"={密码}的格式写入根目录下的FilePasswords.txt。为了安全,默认不勾选。 -
7zFM 联动:选项/解压 勾选 <自动尝试解压密码>,7zFM 打开加密包,点击解压、测试 或双击包内文件时均会自动尝试密码。
右键菜单 → <智能解压> 也会同样自动尝试密码。 -
改进了对嵌套压缩包的处理
7zFM 打开压缩包 并双击进入嵌套压缩包 (如 aaa.7z/bbb.7z) 后 再双击嵌套包内的加密文件 (如 bbb.7z/000.txt) 进行解压时 自动尝试解压密码 的处理。 -
特别说明
-
自动尝试密码 读取txt中的每一行对压缩包做测试 使用内存预解压来判断密码是否正确,从而避免.rar .zip .zipx这类非.7z格式的加密包 总是先创建0字节文件。
-
-cpm 与 -cpwd 类似,但它不解压文件,而是记录匹配的密码到 FilePasswords.txt。
7zFM 「文件」菜单 以及 文件列表区右键菜单 中 增加了以下三项实用功能:
- 复制名称 (
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)。 -
注:此项位于「属性」菜单项下方,仅在进入压缩包内部时可用,未进入压缩包时显示为灰色禁用状态。
-
在列表区 文件的右键弹出菜单中也添加此三项
当用 7zFM 打开压缩包时,按 Ctrl+V 可将剪贴板中文件添加到压缩包,与拖入文件相似。
添加文件时 显示一个新的"添加到压缩包对话框",有一些选项,可以设置密码。由此实现一个压缩包内 不同文件可以有不同密码。
(致敬WinRAR的这项功能,非常方便)

-
动态单位列:文件列表区新增 「大小(自动)」 列。文件大小将以更友好的动态单位(
KB/MB/GB)显示,可在列头右键菜单中开启。 -
行号列:文件列表区新增 ** 行号 ** 列。右键点击列表头,可以显示/隐藏。
-
排序箭头指示:为排序列头增加了三角箭头标识,明确反映当前是正序还是逆序。
-
加密标识:加密文件的文件名称后 附加星号 *,一目了然 (致敬WinRAR)。
-
增加注释面板,可显示 .rar 和 .zip 压缩包的注释内容 (只读) 目前只发现 .rar 和 .zip 这两种格式可带注释,当读取到注释时自动显示内容到右侧面板。 菜单 查看/注释 或 快捷键F10 可关闭/打开右侧的注释显示面板
- 增加 显示当前文件的解压/压缩进度条
- 底部 左侧增加勾选框 <完成后关机>,触发后执行shutdown -s -t 30,30秒后真正关机。可用 shutdown -a 取消关机。
-
工具栏图标替换:替换来自 Auto7zip 的工具栏美化图标。
-
关联图标替换:替换来自 mefcl.com Anonymous组的27个关联格式图标。Office风格 (修改了rar.ico)
-
字体可调:在
选项/设置界面中新增[设置字体]按钮。弹框可更改字体名称、字号大小及字形,配置实时保存于 ini / 注册表。 -
❌ [未能实现] 将排序列的背景色改为浅灰色
rgb(240,240,240)。
- 如果目录内存在7-zip.ini,直接读取它并忽略注册表。否则走原来的注册表配置。
大原则:7-zip.ini 的影响范围是: 7zFM.exe 主界面 + 右键菜单 + 7zG.exe压缩对话框。
不影响命令行 7z.exe 7za.exe,命令行是通过参数来控制的,不需要读取7z.ini
压缩进程界面 增加的当前进度条,在固实压缩时不能准确显示压缩进度,只是读取文件字节的进度。 非固实压缩则无问题
读取指定的密码表以自动尝试,进行智能解压,解压成功后进入文件夹,并将原压缩包删除到回收站:
7zG.exe x -csmt -cgo -crb -cpwd"D:\密码表.txt" "C:\foobar.7z"
使用控制台版本,对包内即使只有一个文件的情况也强制创建同名外层文件夹,并在解压后自动进入:
7za.exe x -csmd -cgo -cpwd "C:\SingleFile.7z"
7z.exe x -cpm "C:\SingleFile.7z"
// DOpus中调用:
7zg.exe x -cpm {filepath}核心两步(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(动态链接库)



%20%E6%98%BE%E7%A4%BA%E6%B3%A8%E9%87%8A.png)
