# CopyFilePath **Repository Path**: kerndev/copy-file-path ## Basic Information - **Project Name**: CopyFilePath - **Description**: 右键菜单复制文件路径 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-15 - **Last Updated**: 2026-10-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CopyFilePath — 复制文件路径 在 Windows 文件右键菜单中加入「复制文件路径」功能,快速复制所选文件的完整路径。 本仓库包含两种实现方案:方案 A(Shell 扩展)和方案 B(最小代价)。 --- ## 方案 A(`PLANA/`)— Shell 扩展(已弃用) 基于 Windows 外壳扩展(Shell Extension)的完整实现。 - **技术**:进程内 COM 组件 `CopyFilePath.dll`,实现 `IShellExtInit` + `IContextMenu`。 - **能力**:支持**多选**(多个文件逐行复制);运行时不弹黑窗。 - **行为**: - 右键文件 → 复制完整路径。 - 对快捷方式(.lnk):Explorer 会把它解析成目标,复制到的是**目标路径**。 - **已知限制**: - 多选多个快捷方式时只能复制到 1 个目标(Explorer 的数据对象无法表示跨目录的多个目标)。 - DLL 位宽必须与 Explorer 一致(64 位系统编译 x64)。 - **状态**:已弃用(实现复杂、存在上述限制),仅作存档保留。 --- ## 方案 B(`PLANB/`)— 最小代价(当前使用) 用一个极小的 helper 程序 + 一段注册表命令实现,代价最小。 - **技术**:`setclip.exe`(GUI 子系统小程序,把命令行参数写入剪贴板)+ 注册表命令。 - **能力**:复制**单个**文件路径。 - **行为**: - 右键文件 → 「复制文件路径」→ 复制该文件完整路径。 - 对快捷方式(.lnk):复制 `.lnk` 自身路径(`%1` 即文件本身),不解析目标。 - 运行时不弹黑窗(GUI 子系统)。 - **优点**:无 DLL、无 COM、无外壳扩展,实现最小。 ### 文件 | 文件 | 说明 | | --- | --- | | `setclip.c` | 源码 | | `setclip.reg` | 注册表脚本 | | `build.bat` | 编译脚本 | ### 编译 需要 Visual Studio(脚本用 VS2017,路径可按需修改): ```bat cd PLANB build.bat ``` ### 安装 1. 把编译出的 `setclip.exe` 放到 PATH 中的目录(例如 `C:\Windows\`), 或把 `setclip.reg` 里的命令改成 `setclip.exe` 的绝对路径。 2. 以管理员身份导入注册表: ```bat reg import setclip.reg ``` ### 卸载 ```bat reg delete "HKCR\*\shell\CopyFullPath" /f del /f /q C:\Windows\setclip.exe ``` --- ## 目录结构 ``` copy-full-path/ ├── PLANA/ 方案 A(Shell 扩展,已弃用) ├── PLANB/ 方案 B(最小代价,当前使用) └── README.md ```