右键菜单
文章目录
创建右键cmd
创建一个cmd.reg 输入以下内容
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd_here]
@="打开命令行"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd_here\command]
@="\"C:\\Windows\\System32\\cmd.exe\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\cmdPrompt]
@="打开命令行"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\cmdPrompt\command]
@="\"C:\\Windows\\System32\\cmd.exe\" \"cd %1\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmd_here]
@="打开命令行"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmd_here\command]
@="\"C:\\Windows\\System32\\cmd.exe\""
设置图表 icon
在 cmd_here 下创建 字符串值 icon 值:
可以设置为 C:\Windows\System32\cmd.exe
也可以直接设置一个图片 test.icon
设置 winr快捷命令
设置vbs脚本
新建一个 inkpath.vbs脚本
' 脚本说明 https://blog.csdn.net/milaoshu1020/article/details/80711574
' 脚本版本 v1.1
' installpath是本脚本要安装到的路径.
' d:\L是脚本所在的路径,也是保存快捷方式的目录.
' [更新历史]
' 2019.06.03 v1.2 增加了安装时自动提权的代码.
' 2018.12.29 v1.1 新增加了对系统变量PATHEXT的注册,效果是自定义命令可以在命令行中使用(不用加扩展名".LNK").
' 2018.06.18 v1.0 初始版本,实现了基本功能.
installpath = "E:\worksoft\inkpath\Win+R快捷命令.vbs"
set fso = createobject("scripting.filesystemobject")
set shell = createobject("wscript.shell")
installdir = fso.getparentfoldername(installpath)
installbase = fso.getbasename(installpath)
If wscript.arguments.count = 0 Then
Set sh = createobject("shell.application")
sh.shellexecute wscript.fullname,"""" & wscript.scriptfullname & """ -install",,"runas"
Else
If wscript.arguments(0) = "-install" Then
Select Case msgbox("是否安装'" & installbase & "'脚本?",vbokcancel)
Case vbcancel
wscript.quit
End select
copyscriptfile
addinstdirtosystempath
createinstdirlnk
createsendtolnk
msgbox "'" & installpath & "'安装完成,你现在可以:" & vbcrlf & _
"使用右键菜单中的'发送到'创建自定义命令." & vbcrlf & _
"Win+R,输入'" & fso.getfolder(installdir).name & "'以打开命令(快捷方式)列表目录." & vbcrlf & _
"Win+R,输入'命令(快捷方式名称)'以打开相应的程序或者目录."
Else
prompttoaddlnk
End If
End If
Sub PromptToAddLnk()
For i = 0 To wscript.arguments.count - 1
targetpath = wscript.arguments(i)
lnkname = fso.getbasename(targetpath)
do
lnkname = inputbox("请输入'" & fso.getfilename(targetpath) & "'的快捷方式名称(用于运行命令):",,lnkname)
lnkpath = fso.buildpath(installdir,lnkname & ".lnk")
If Not fso.fileexists(lnkpath) Or lnkname = "" Then
Exit Do
End If
Select Case msgbox("'" & lnkpath & "'文件已存在,是否覆盖?",vbexclamation Or vbyesnocancel)
Case vbyes
Exit Do
Case vbcancel
lnkname = ""
Exit Do
End Select
Loop While True
If lnkname <> "" Then
Set shortcut = shell.createshortcut(lnkpath)
shortcut.targetpath = targetpath
shortcut.save
msgbox "'" & lnkpath & "'创建成功!"
End If
Next
End Sub
Sub CopyScriptFile()
If LCase(installpath) = LCase(wscript.scriptfullname) Then
Exit Sub
End If
If Not fso.folderexists(installdir) Then
fso.createfolder(installdir)
End If
fso.copyfile wscript.scriptfullname,installpath,true
End Sub
Sub AddInstDirToSystemPath()
pathname = installdir & ";"
Set sysenv = shell.environment("System")
If InStr(LCase(sysenv("PATH")),LCase(pathname)) = 0 Then
sysenv("PATH") = pathname & sysenv("PATH")
End If
extname = ";.LNK"
If InStr(LCase(sysenv("PATHEXT")),LCase(extname)) = 0 Then
sysenv("PATHEXT") = sysenv("PATHEXT") & extname
End If
End Sub
Sub CreateSendToLnk()
sendtodir = shell.specialfolders("SendTo")
lnkpath = fso.buildpath(sendtodir,installbase & ".lnk")
Set shortcut = shell.createshortcut(lnkpath)
shortcut.targetpath = installpath
shortcut.save
End Sub
Sub CreateInstDirLnk()
lnkpath = fso.buildpath(installdir,fso.getfolder(installdir).name & ".lnk")
If Not fso.fileexists(lnkpath) Then
Set shortcut = shell.createshortcut(lnkpath)
shortcut.targetpath = installdir
shortcut.save
End If
End Sub
使用ScriptCryptor 转换为 winr.exe
设置右键菜单
在注册表 folder 下创建右键 command 为 E:\worksoft\inkpath\winr.exe "%V"
注册表说明
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell 下创建 对文件夹生效
计算机\HKEY_CLASSES_ROOT\*\shell 下 对 文件(.txt .docx)生效()
folder 和 directory 区别
在 Windows 系统中,我们经常会见到「目录」和「文件夹」两个名词,但很多人会这两个概念混用,甚至搞不清楚它们的区别,包括写这篇博文的我,之前也是一样。同样表示「文件夹」的概念,为什么会有两个说法?事实上,这两个词不仅仅是在中文中,在英文原文中,也是有两个不同的词汇,Directory 和 Folder。通常,Directory 被翻译成「目录」,而 Folder 被翻译成「文件夹」。但实际的情况是,很多情况下,这两个的翻译都比较混乱,Directory 也经常被翻译为「文件夹」。那么微软使用 Directory 和 Folder 这两个名词到底什么不同的意义和差异呢?这个问题我多年也没搞清楚,直到最近又在网上搜索资料,并自己进行一些测试后,才发现他们的细微差别。
首先,作为一个 Windows 开发人员,注册表、文件关联等都应该是了解的。那么大家应该都知道,在 Windows 的注册表编辑器中的 HKEY_CLASSES_ROOT 节点下面,有 Directory 和 Folder 两个子键,类似其他的 ProgId 子键,支持在其 shell 子键添加自定义的动作和命令。有一天我突发奇想,如果我分别在这两个位置添加一个动作项,系统该如何显示它们?于是我分别在不同的位置单独添加注册表项,然后观察右键菜单,发现了其中的秘密:
仅在 HKEY_CLASSES_ROOTDirectoryshell 下面随便添加一个节点,如 action,我分别在「计算机」、「回收站」、「计算机」中的任意驱动器、普通文件夹上点击右键,只有普通的文件夹右键菜单中出现了 action 这一菜单项。
仅在 HKEY_CLASSES_ROOTFoldershell 下面随便添加一个节点,如 action,我分别在「计算机」、「回收站」、「计算机」中的任意驱动器、普通文件夹上点击右键,所有这些项目的右键菜单中均出现了 action 这一菜单项。
仅在 HKEY_CLASSES_ROOTDriveshell 下面随便添加一个节点,如 action,我分别在「计算机」、「回收站」、「计算机」中的任意驱动器、普通文件夹上点击右键,只有驱动器盘符右键菜单中出现了 action 这一菜单项。
如此看来,Folder 的范围其实是很大的,它包括了系统中所有可以双击打开并查看其内容的「文件夹」项目,包括「计算机」、「回收站」、「控制面板」等这些虚拟文件夹,以及「计算机」中的所有磁盘驱动器,以及其中的任何文件夹 (Directory)。
而 Directory 的概念则小的很多,它必须是存在于物理磁盘上的一个「文件夹」项目,而「计算机」中的所有磁盘驱动器,如「本地磁盘 (C:)」则不认为是 Directory。
总结:如果是开发外壳扩展 dll,最好根据需要写入到正确的子键下面,不要在 Directory 和 Folder 等子键下乱写一通。虽然有的外壳扩展不支持虚拟文件夹,写在 Directory 下系统也并不会加载,但还是希望各位开发人员能够正确遵守规范。
完整示例
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\添加到快捷方式]
"icon"="E:\\back\\Pictures\\icon\\damotouicon (6).ico"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\添加到快捷方式\command]
@="E:\\worksoft\\inkpath\\winr.exe \"%V\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\open_cmd]
"icon"="C:\\Windows\\System32\\cmd.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\open_cmd\command]
@="\"C:\\Windows\\System32\\cmd.exe\" \"cd %1\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\open_cmd]
"icon"="C:\\Windows\\System32\\cmd.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\open_cmd\command]
@="\"C:\\Windows\\System32\\cmd.exe\""
[HKEY_CLASSES_ROOT\*\shell\添加到快捷命令]
"icon"="E:\\back\\Pictures\\icon\\damotouicon (6).ico"
[HKEY_CLASSES_ROOT\*\shell\添加到快捷命令\command]
@="E:\\worksoft\\inkpath\\winr.exe \"%V\""