无忧启动论坛

标题: 关于右键增加复制文件路径的讨论 [打印本页]

作者: wjgyz740526    时间: 昨天 16:30
标题: 关于右键增加复制文件路径的讨论
本帖最后由 wjgyz740526 于 2024-11-5 10:51 编辑

论坛里关于右键增加复制文件路径的讨论很多,大致有以下几种方法:1、调用系统shell32.dll,缺点是路径两端有双引号,优点是支持多个文件同时获取路径;2、vbscript方式,优点是没有双引号,缺点是不支持多文件获取路径;3、cmd方式,优点是没有双引号,缺点是有黑窗口(是不是支持多文件没测试);4、第三方软件,比如nircdm(不支持多文件复制路径),还有什么path copy copy(功能很强大,英文版,非单文件,)等等
很久以前,xp时代,我找到一个dll文件,直接注册就可以增加右键复制路径的菜单,但是不支持64位系统。前几天看到下面的软件,win10LTSC_x64下安装测试,很不错,支持多文件、无双引号,跟踪了下,就两个文件,一个dll一个cpl,pe下把文件复制到对应目录,导入注册表,却没有什么效果,换了个系统测试、跟踪、导入还是这样。又尝试直接在pe下安装跟踪,软件直接报错,不支持安装,换了几个pe都这样,很无奈。


现在把软件发出来,大家看看,欢迎讨论,有更好的方案也请分享。

附件.7z (384.08 KB, 下载次数: 12)

附件里面包括:1、xp时代的pathcopyEx.dll,有人能改成支持64位嘛?2、CopyPathExt_Setup.exe,大家测试跟踪下;3、我跟踪出来的文件

昨天经过坛友指点,CopyPathExt_Setup.exe需要.Net环境,pe下就算了。

然后,做了以下测试,感觉pecmd应该可以搞定,

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\PecmdPathCopy]
@="复制文件完整路径"
"ICON"="shell32.dll,112"

[HKEY_CLASSES_ROOT\*\shell\PecmdPathCopy\command]
@="\"X:\\WINDOWS\\SYSTEM32\\PECMD.EXE\" \"ENVI^ Clipboard=%0\""

这个注册表能复制路径,但多文件无效,按注册表参数的官方说法,%0代表选择的第一个文件,%*代表选择的所有文件,各路径之间以空格相连,然而,改成这样:

[HKEY_CLASSES_ROOT\*\shell\PecmdPathCopy\command]
@="\"X:\\WINDOWS\\SYSTEM32\\PECMD.EXE\" \"ENVI^ Clipboard=%*\""


剪贴板却没有数据。

我尝试用pecmd mess %0写入注册表,选中多个文件的时候,却又能弹出各个文件的路径。

各位达人尝试下吧,看看有什么好的办法



作者: 窄口牛    时间: 昨天 16:41
为啥不要引号呢?有引号保险哇?
作者: wjgyz740526    时间: 昨天 16:47
窄口牛 发表于 2024-11-4 16:41
为啥不要引号呢?有引号保险哇?

很多时候不需要引号啊
作者: fruds9981    时间: 昨天 16:56
标记以方便后续学习
作者: hlowld    时间: 昨天 17:08
[HKEY_CLASSES_ROOT\*\shell\复制路径\command]
@="mshta.exe vbscript:createobject(\"wscript.shell\").run(\"cmd /c ECHO %1|CLIP\",0)(window.close)"
这样没有双引号,也没有黑窗口
作者: wjgyz740526    时间: 昨天 17:10
hlowld 发表于 2024-11-4 17:08
[HKEY_CLASSES_ROOT\*\shell\复制路径\command]
@="mshta.exe vbscript:createobject(\"wscript.shell\"). ...

vbscript方式不支持多文件同时获取路径
作者: c2y    时间: 昨天 17:24
一个是1.0版,一个是2.1,都是32位版本。注册表正确,两个效果相同。
作者: baby1277    时间: 昨天 17:31
很多程序浏览框输入框带引号就报错,带引号只是编写代码方便,用户很不方便。
再说下,一般用户不需要同时复制多条路径,这个也是大师们的特殊需要。
还有那个黑框框,如果每个菜单都是这样估计你早就问候3哥了
所以一般用户需求就是:复制一条路径,不带引号,不要黑框框,就行了。
我们是一般用户就不折腾了,你们折腾好了我在看下。
作者: Bluebells    时间: 昨天 17:31
wjgyz740526 发表于 2024-11-4 17:10
vbscript方式不支持多文件同时获取路径

然而人家的核心使用的是cmd, 只是使用mshta调用以防止出现黑窗口罢了
作者: ql1307096    时间: 昨天 17:31
单为了实现快捷复制文件路径的话,使用Everything更加方便,快速搜索到文件后右键就可以复制完整路径了,还支持多选。
作者: wjgyz740526    时间: 昨天 17:32
c2y 发表于 2024-11-4 17:24
一个是1.0版,一个是2.1,都是32位版本。注册表正确,两个效果相同。

关键是正常的win64系统安装有效,提取跟踪出来的pe64下无效,不知道什么原因啊
作者: hmaaaa    时间: 昨天 17:41
謝謝大大分享~感恩 ^^ 有您真好~!辛苦了!
作者: wjgyz740526    时间: 昨天 17:50
Bluebells 发表于 2024-11-4 17:31
然而人家的核心使用的是cmd, 只是使用mshta调用以防止出现黑窗口罢了

刚没细看后面的代码,看到vbscript以为一样的,他这个还真是cmd方式,但应该不支持多文件

作者: hlowld    时间: 昨天 18:01
发一个我自己在用的cmd复制名称和路径,mshta调用避免黑窗口
reg add "HKEY_CLASSES_ROOT\*\shell\复制路径\command" /ve /t REG_SZ /d "mshta.exe vbscript:createobject(\"wscript.shell\").run(\"cmd /c ECHO %%1^|CLIP\",0)(window.close)" /f

reg add "HKEY_CLASSES_ROOT\*\shell\复制名称\command" /ve /t REG_SZ /d "mshta.exe vbscript:createobject(\"wscript.shell\").run(\"cmd /c for %%%%F in (\"\"%%1\"\") do ECHO %%%%~nxF^|CLIP\",0)(window.close)" /f
适合放在批处理中执行,如果要在命令行窗口执行,需将%%替换为%
作者: Bluebells    时间: 昨天 19:08
附件中的那个什么 CopyPath Ext 需要 .Net Framework2.0 组件, 绝大多数 WinPE 都不会集成这个
PS: 一些巨无霸 WinPE 会集成 .Net Framework
作者: wjgyz740526    时间: 昨天 19:33
Bluebells 发表于 2024-11-4 19:08
附件中的那个什么 CopyPath Ext 需要 .Net Framework2.0 组件, 绝大多数 WinPE 都不会集成这个
PS: 一些巨 ...

难怪呢,我想起来了你说的是对的

我跟踪的时候,系统是报告在clr_2.0文件夹有写入动作
作者: cqh    时间: 昨天 19:47
瞧一瞧
作者: vaf    时间: 昨天 20:08
从不喜欢此功能. 因为地址栏可替代.

作者: htmlc4    时间: 昨天 20:20
正常来说还是需要有引号的,cli下的路径往往都需要引号
作者: GXNNYWF    时间: 昨天 20:49
从不喜欢此功能. 因为地址栏可替代
作者: 孟仁飞    时间: 2 小时前
学习
作者: ppll2030    时间: 1 小时前
注册表无法同时传递多文件,所有纯脚本基本无解,除非调用dll文件。
以前折中的办法,就是利用右键发送的功能,直接传递多文件到脚本
现在基本都是用第三方资源管理器,直接自带该功能。

作者: wjgyz740526    时间: 1 小时前
ppll2030 发表于 2024-11-5 10:39
注册表无法同时传递多文件,所有纯脚本基本无解,除非调用dll文件。
以前折中的办法,就是利用右键发送的 ...

做了以下测试,感觉pecmd应该可以搞定,

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\PecmdPathCopy]
@="复制文件完整路径"
"ICON"="shell32.dll,112"

[HKEY_CLASSES_ROOT\*\shell\PecmdPathCopy\command]
@="\"X:\\WINDOWS\\SYSTEM32\\PECMD.EXE\" \"ENVI^ Clipboard=%0\""

这个注册表能复制路径,但多文件无效,按注册表参数的官方说法,%0代表选择的第一个文件,%*代表选择的所有文件,各路径之间以空格相连,然而,改成这样:

[HKEY_CLASSES_ROOT\*\shell\PecmdPathCopy\command]
@="\"X:\\WINDOWS\\SYSTEM32\\PECMD.EXE\" \"ENVI^ Clipboard=%*\""


剪贴板却没有数据。

我尝试用pecmd mess %0写入注册表,选中多个文件的时候,却又能弹出各个文件的路径。

各位达人尝试下吧,看看有什么好的办法





欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3