右键菜单


右键菜单

[TOC]

创建右键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\""

文章作者: liudong
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liudong !
  目录