无忧启动论坛

标题: 用pecmd实现发送到--桌面快捷方式 [打印本页]

作者: yinyuan    时间: 2010-2-26 14:28
标题: 用pecmd实现发送到--桌面快捷方式
思路是用批处理调用pecmd来实现,把批处理放到“SendTo”目录里。批处理内容:

PECMD LINK %Desktop%\xxxx,%1

现在的问题是创建出来的快捷方式都是用xxxx来命名的。

怎么判断文件名,用判断出来的文件名来命名快捷方式的文件名,对批处理不太懂。请大家指点一下。
作者: NicTense    时间: 2010-2-26 14:31
这个很简单

%~n1 就是文件名
作者: yinyuan    时间: 2010-2-26 14:51
[这个很简单<br />
<br />
%~n1 就是文件名 [/quote]<br />



感谢你的帮助。

谢谢
作者: NicTense    时间: 2010-2-26 15:30
这个方式最大的缺陷就是屏幕会闪一下,因为要弹出一个cmd窗口,然后瞬间关闭

还有就是发送到 显示的不是 “桌面快捷方式” 而是 “桌面快捷方式.CMD” 或者.bat

如果隐藏后缀名,则别的地方也不显示后缀名

不知道你解决了这2个问题没?
作者: yinyuan    时间: 2010-2-26 15:53
屏幕会闪这个好像无法解决,除了以前好像见过一个代替cmd的小程序可以隐藏运行。


第二个好解决,把这个批处理放到system32目录,在pecmd.in加

FILE %SendTo%\桌面快捷方式,%SystemRoot%\SYSTEM32\快捷方式.bat,,SHELL32.DLL,34

就可以了,这样图标还是桌面快捷方式的图标,扩展名也不会在右键菜单中显示。比用那个dll文件要小。


.

[ 本帖最后由 yinyuan 于 2010-2-26 16:27 编辑 ]
作者: NicTense    时间: 2010-2-26 18:47
原帖由 yinyuan 于 2010-2-26 15:53 发表
屏幕会闪这个好像无法解决,除了以前好像见过一个代替cmd的小程序可以隐藏运行。


第二个好解决,把这个批处理放到system32目录,在pecmd.in加

FILE %SendTo%\桌面快捷方式,%SystemRoot%\SYSTEM32\快捷方 ...



应该是 LINK 吧

闪一下还是不太爽,不过我也不想加那个没什么用的sendmail.dll
作者: 66369    时间: 2010-2-26 18:50
给你个小的用下.

SEND.rar (13.68 KB, 下载次数: 293)
作者: x9tian    时间: 2010-2-26 19:02
原帖由 NicTense 于 2010-2-26 14:31 发表
这个很简单

%~n1 就是文件名


  pecmd 里面 现在 不是有了,  name 参数了吗?


    可以不调用DOS  直载用pecmd 呀
作者: yinyuan    时间: 2010-2-26 19:36
到家实机试验成功。xcmd.ini 添加
LINK %SendTo%\桌面快捷方式,%SystemRoot%\SYSTEM32\快捷方式.bat,,SHELL32.DLL,34

快捷方式.bat批处理内容:放在system32下
XCMD LINK %Desktop%\%~n1,%1

创建快捷方式时cmd窗口一闪而过,感觉还行。在此多谢 NicTense 朋友的指点。
作者: NicTense    时间: 2010-2-26 21:14
原帖由 x9tian 于 2010-2-26 19:02 发表


  pecmd 里面 现在 不是有了,  name 参数了吗?


    可以不调用DOS  直载用pecmd 呀


反正都只能通过批处理调用pecmd(或者xcmd)的话,用%~n1更直接

如果是写进注册表的话,%~n1无效,这时用name就比较合适了

不过我还没研究过是否能通过修改注册表来完成这个功能


@yinyuan
不客气,举手之劳,讨论讨论而已,你不也帮我解决了一个问题吗
作者: tzxinqing    时间: 2010-2-26 21:37
围观楼上高手....
作者: ones    时间: 2010-2-26 22:51
用vbs脚本来隐藏启动批处理
作者: landays    时间: 2010-2-26 22:56
看的不是太明白
是在右键添加一个发送快捷方式到桌面的选项吗?
如果是的话,PECMD+注册表可以实现。

PECMD.EXE TEAM NAME FileName=%1|LINK !%%Desktop%%\\%%FileName%%,%1

  1. Windows Registry Editor Version 5.00

  2. [HKEY_CLASSES_ROOT\*\shell\DesktopLnk]
  3. @="发送到 - 桌面快捷方式"
  4. [HKEY_CLASSES_ROOT\*\shell\DesktopLnk\command]
  5. @="PECMD.EXE TEAM NAME FileName=%1|LINK !%%Desktop%%\\%%FileName%%,%1"
  6. [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\发送到 - 桌面快捷方式]
  7. @="发送到 - 桌面快捷方式"
  8. [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\发送到 - 桌面快捷方式\command]
  9. @=hex(2):50,00,45,00,43,00,4d,00,44,00,2e,00,45,00,58,00,45,00,20,00,54,00,45,\
  10.   00,41,00,4d,00,20,00,4e,00,41,00,4d,00,45,00,20,00,46,00,69,00,6c,00,65,00,\
  11.   4e,00,61,00,6d,00,65,00,3d,00,25,00,31,00,7c,00,4c,00,49,00,4e,00,4b,00,20,\
  12.   00,21,00,25,00,25,00,44,00,65,00,73,00,6b,00,74,00,6f,00,70,00,25,00,25,00,\
  13.   5c,00,5c,00,25,00,25,00,46,00,69,00,6c,00,65,00,4e,00,61,00,6d,00,65,00,25,\
  14.   00,25,00,2c,00,25,00,31,00,00,00
复制代码

[ 本帖最后由 landays 于 2010-2-26 23:07 编辑 ]
作者: yinyuan    时间: 2010-2-26 23:08
原帖由 ones 于 2010-2-26 22:51 发表
用vbs脚本来隐藏启动批处理



vbs本身就可隐藏实现和创建桌面快捷方式,但pe一般都不支持vbs脚本。

Set unNamedArguments = WScript.Arguments.UnNamed
set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFolder = "C:\Documents and Settings\Administrator\桌面"
for count = 0 to wscript.arguments.count-1 Step 1
filename = unNamedArguments.Item(count)
Set objFile = objFSO.GetFile(filename)
set oShellLink = WshShell.CreateShortcut(strFolder & objFSO.GetBaseName(filename) & ".lnk")
oShellLink.TargetPath = filename
oShellLink.WindowStyle = 1
oShellLink.WorkingDirectory = objFSO.GetParentFolderName(filename)
oShellLink.Save
NEXT

以上脚本保存为xxx.vbs保存到SendTo目录,就可实现桌面快捷方式功能,可惜pe下无法运行。添加组件有违背了做小的初衷。
作者: NicTense    时间: 2010-2-26 23:14
原帖由 landays 于 2010-2-26 22:56 发表
看的不是太明白
是在右键添加一个发送快捷方式到桌面的选项吗?
如果是的话,PECMD+注册表可以实现。

PECMD.EXE TEAM NAME FileName=%1|LINK !%%Desktop%%\\%%FileName%%,%1

Windows Registry Editor V ...



不是,这个容易实现
但是如果这样,这个就不是出现在 发送到 的子菜单里了

不过如果没法解决闪一下的问题
像这样直接创建一个右键菜单项也是一个可以考虑的方案
名字改成 “创建桌面快捷方式”可能更好一些

但是这个要创建几个项,*的,目录的。。。

[ 本帖最后由 NicTense 于 2010-2-26 23:15 编辑 ]
作者: yinyuan    时间: 2010-2-26 23:18
原帖由 landays 于 2010-2-26 22:56 发表
看的不是太明白
是在右键添加一个发送快捷方式到桌面的选项吗?
如果是的话,PECMD+注册表可以实现。

PECMD.EXE TEAM NAME FileName=%1|LINK !%%Desktop%%\\%%FileName%%,%1

Windows Registry Editor V ...



这样不是右键又多出一个“发送到 - 桌面快捷方式”的菜单,右键本身有一个“发送到”的菜单,主要是想把pe本身的菜单利用起来。呵呵
作者: NicTense    时间: 2010-2-27 10:47
哈哈,问题解决了

LINK %SendTo%\桌面快捷方式,%WS%\PECMD.EXE,EXEC !%WS%\desklink.cmd,explorer.exe#3

这样就不会闪出cmd框了,楼主看到试一下,这个方法比sendmail好,节省空间也不用注册dll

如果 %WS%没有定义的话,需要改成 %WinDir%\system32


(呆会说不定又有个人跑出来说一句,才知道啊,哈,每次解决问题那个人就会出来说这句。。。)

[ 本帖最后由 NicTense 于 2010-2-27 11:53 编辑 ]
作者: yinyuan    时间: 2010-2-27 11:44
昨天睡觉时我还在想能不能用xcmd的隐藏运行程序的方法来吧那个cmd的黑框给去掉,没想到你已经弄好了,刚才虚拟机里试了,完全没问题。

LINK %SendTo%\桌面快捷方式,%SystemRoot%\XCMD.EXE,EXEC !%SystemRoot%\桌面快捷方式.bat,SHELL32.DLL,34

你解决大问题了!
作者: NicTense    时间: 2010-2-27 11:46
标题: 回复 #18 yinyuan 的帖子
昨天太累了,脑袋有点迟钝
今天一睡醒,就突然觉得好像这个根本就不是问题,测试了一下,果然没问题

不过貌似快捷方式不支持 %1 之类的参数,要不就可以连cmd文件都不要了
作者: yinyuan    时间: 2010-2-27 11:56
已经不错了,去掉了那个dll文件,有免去了注册,呵呵
作者: NicTense    时间: 2010-2-27 12:01
对了,关于%1的附加参数,像%~n1之类的
你可以在cmd下 输入 for /?
最后部分有详细列表的
还有set /?
有关于 %a:.=_ %  %a:~10% 之类的详细说明,有空可以看看,几分钟就明白了

不过这些参数只能在批处理用

像注册表只能用原始的  %1 或者 %L
作者: yinyuan    时间: 2010-2-27 13:05
好的,近段抓紧时间学习一下批处理。不懂的地方还的请你指教。




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