Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

7zip-Smart

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 Smart 增强版 基于v26.02版本修改

本项目为 7-Zip 的修改增强版,旨在实现类似 Bandizip 的智能解压自动尝试解压密码7zFM 文件管理器功能增强、更现代的美化图标以及命令行自定义参数。

截图

右键菜单
右键菜单

密码输入框
密码输入框增强

选项/解压 设置页面
右键菜单

选项 设置字体 大小(自动列)
右键菜单

Directory Opus 按钮中调用
右键菜单


🛠 新增自定义参数总览 (Custom Parameters)

为避免参数混淆,且符合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


🚀 核心修改特性

1. 智能解压机制 (Smart Extract)

实现类似 Bandizip 的无脑解压体验:

  • -csmt 逻辑

  • 当压缩包内只有一项(无论是一个文件还是一个文件夹)时,不额外创建外层文件夹,直接解压到当前目录。

  • 当压缩包内多于一项时,自动以压缩包名称创建外层文件夹,防止文件散乱。

  • -csmd 逻辑

  • 当压缩包内只有一个文件(非文件夹)时,依然以压缩包文件名创建外层文件夹,其余与 -csmt 一致。

  • 右键菜单集成

  • 文件右键弹出菜单新增 “智能解压” 项,并将其移至解压系列菜单的首位

  • 该右键菜单行为受 7zFM 中 选项/解压 <智能解压时总是创建文件夹> 勾选状态的控制。

  • 右键菜单 默认显示图标。


2. 7zFM文件管理器,工具/选项「解压」标签页

7zFM.exe -> 工具 -> 选项 中新增 「解压」 专属标签卡,提供图形化配置(对应影响右键菜单及默认行为):

  • [ ] 排除重复的根文件夹 (原功能移至此处)
  • [ ] 智能解压时总是创建文件夹 (映射参数:-csmd)
  • [ ] 若文件夹已存在,则创建带(n)后缀的新文件夹 (映射参数:-cdirn)
  • [ ] 解压后打开文件夹 (映射参数:-cgo)
  • [ ] 解压后删除压缩包 (映射参数:-cdel)
  • [ ] 删除到回收站 (映射参数:-crb)
  • [ ] 自动尝试解压密码 (映射参数:-cpwd)
  • 文本输入框与 [浏览] 按钮,用于指定自定义密码 txt 文件路径 (映射参数:-cpwd<filepath.txt>)

以上勾选项 可影响右键菜单解压操作的行为。


3. 自动尝试解压密码,以便无脑解压加密包

为提升加密包的解压效率,引入多级密码自动轮询匹配机制:

  • 命令行开关 -cpwd<filepath.txt>

  • 给 7zG.exe / 7za.exe / 7z.exe 增加命令行参数:-cpwd<filepath.txt>

  • -cpwd 也作为开关,无它则不自动尝试密码,有它 无论指定的txt路径是否有效,都会自动尝试密码。

  • 路径支持双引号包裹,如 -cpwd"D:\My Passwords.txt"。若未指定路径或路径无效,仅作为开启密码尝试的开关。

  • -cpwd 后紧跟路径,不要有空格

  • 密码文件读取优先级顺序

  1. 首先读取 7-Zip 根目录下的 FilePasswords.txt → 每行一个 "{完整文件路径}"={密码}。
  2. 其次读取 -cpwd 参数指定的自定义文件 (未指定或路径无效 则仅作开关) → 每行一个密码
  3. 最后读取 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。


4. 7zFM 文件菜单与右键菜单增强

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)。

  • 注:此项位于「属性」菜单项下方,仅在进入压缩包内部时可用,未进入压缩包时显示为灰色禁用状态。

  • 在列表区 文件的右键弹出菜单中也添加此三项


5. 7zFM 支持 Ctrl+V 添加文件到压缩包

当用 7zFM 打开压缩包时,按 Ctrl+V 可将剪贴板中文件添加到压缩包,与拖入文件相似。
添加文件时 显示一个新的"添加到压缩包对话框",有一些选项,可以设置密码。由此实现一个压缩包内 不同文件可以有不同密码。
(致敬WinRAR的这项功能,非常方便)
添加文件到压缩包


6. 界面增强

7zFM 管理器界面

  • 动态单位列:文件列表区新增 「大小(自动)」 列。文件大小将以更友好的动态单位(KB / MB / GB)显示,可在列头右键菜单中开启。

  • 行号列:文件列表区新增 ** 行号 ** 列。右键点击列表头,可以显示/隐藏。

  • 排序箭头指示:为排序列头增加了三角箭头标识,明确反映当前是正序还是逆序。

  • 加密标识:加密文件的文件名称后 附加星号 *,一目了然 (致敬WinRAR)。

  • 增加注释面板,可显示 .rar 和 .zip 压缩包的注释内容 (只读) 目前只发现 .rar 和 .zip 这两种格式可带注释,当读取到注释时自动显示内容到右侧面板。 菜单 查看/注释 或 快捷键F10 可关闭/打开右侧的注释显示面板

解压/压缩进程界面

  • 增加 显示当前文件的解压/压缩进度条
  • 底部 左侧增加勾选框 <完成后关机>,触发后执行shutdown -s -t 30,30秒后真正关机。可用 shutdown -a 取消关机。

7. UI 与视觉美化

  • 工具栏图标替换:替换来自 Auto7zip 的工具栏美化图标。

  • 关联图标替换:替换来自 mefcl.com Anonymous组的27个关联格式图标。Office风格 (修改了rar.ico)

  • 字体可调:在 选项/设置 界面中新增 [设置字体] 按钮。弹框可更改字体名称、字号大小及字形,配置实时保存于 ini / 注册表。

  • [未能实现] 将排序列的背景色改为浅灰色 rgb(240,240,240)


8. 配置保存到 .ini,完全便携化

  • 如果目录内存在7-zip.ini,直接读取它并忽略注册表。否则走原来的注册表配置。
    大原则:7-zip.ini 的影响范围是: 7zFM.exe 主界面 + 右键菜单 + 7zG.exe压缩对话框。
    不影响命令行 7z.exe 7za.exe,命令行是通过参数来控制的,不需要读取7z.ini

9. 暂未解决的问题

压缩进程界面 增加的当前进度条,在固实压缩时不能准确显示压缩进度,只是读取文件字节的进度。 非固实压缩则无问题


💻 命令行使用示例 (CLI Examples)

示例 1:智能解压、联动删除并打开目标文件夹

读取指定的密码表以自动尝试,进行智能解压,解压成功后进入文件夹,并将原压缩包删除到回收站:

7zG.exe x -csmt -cgo -crb -cpwd"D:\密码表.txt" "C:\foobar.7z"

示例 2:强制创建外层目录的智能解压

使用控制台版本,对包内即使只有一个文件的情况也强制创建同名外层文件夹,并在解压后自动进入:

7za.exe x -csmd -cgo -cpwd "C:\SingleFile.7z"

示例 3:对多个压缩包测试txt中的密码,并将匹配结果写入 FilePasswords.txt

7z.exe x -cpm "C:\SingleFile.7z"
// DOpus中调用:
7zg.exe x -cpm {filepath}

📦 编译 (compile)

核心两步(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

📦 主要编译产物 (Build Outputs)

修改代码后 需编译以下文件:

  • 7zFM.exe (文件管理器GUI)
  • 7zG.exe (带界面的命令行工具)
  • 7z.exe / 7za.exe (纯命令行工具)
  • 7-zip.dll (右键菜单会调用)
  • 7z.dll (动态链接库)

About

Modified 7-Zip's source code to add smart extraction, auto-attempt extraction password, auto-opening extracted folders, auto-deleting original archives after extraction, and font settings. 修改源码增强7-Zip的功能,增加了智能解压、自动尝试解压密码、解压后自动进入、自动删除,字体调整,显示注释等

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages