增加系统右键菜单,执行bat文件

win10自定义鼠标右键多级菜单(包含桌面)

--------------如果觉得博主写的可以,请关注博主--------------

首先

win + r   输入 regedit 进去注册表

然后

# HKEY_CLASSES_ROOT\*\shell 

  1. 在shell 创建一个你想要的右键文件  例如:KinokoYm
  2. 点击这个文件
  3. 在右侧的界面中,会出现一个默认的属性,或者是default
  4. 右键 点击这个文件,新建一个字符串值 

           

        

  ##属性

    ### SubCommands

  1. 有一个属性决定了是否是多级菜单模式:SubCommands(如果不创建多级的菜单,这个属性可以不加)

    ### icon

  1. 继续创建一个字符串值,然后 输入icon :这个属性决定了是否有图标(博主知道2中填法)

     #### icon填法

  1. 第一种:C:\KinokoYm.ico  可以输入一个类似的地址(随便百度一个icon图标生成工具都可以)
  2. 第二种:G:\Web Storm\sublime\Sublime Text\sublime_text.exe (例如博主使用的sublime,可以直接吧文件路径放入

     

    ### MUIVerb(这个属性可以加可以不加,用来修改你的右键名,不加默认为项名)

  1. 鼠标双击,在弹出的框中输入即可

  ## 创建2级菜单栏

  1. 在博主例如的文件下(KinokoYm),创建一个名字为 shell 的文件
  2. 在这个名为 shell 的文件下 创建一个例如 sublime(叫什么都可以) 的文件
  3. 同样进行 icon ,MUIVerb 属性的创建(你们可以选择不创建,这个不影响效果)
  4. sublime 下创建一个 名为 command(必须叫这个名字) 的文件
  5. command 右侧 双击默认的 键(形容右侧文件)
  6. 输入 你想要添加功能的应用程序执行文件或者文件路径:
  7. G:\Web Storm\sublime\Sublime Text\sublime_text.exe "%1"("%1"就是以当前位置打开文件)

          

   ## 如果想在桌面,或者任意文件中空白地方添加右键菜单

     ### 可以在 (这个是在桌面添加右键菜单)

      #### \HKEY_CLASSES_ROOT\DesktopBackground

         

继续上面所讲到的步骤

     ### 也可以在 (这个是在文件空白位置右键菜单)

      #### \HKEY_CLASSES_ROOT\Directory\Background

          

继续上面所讲到的步骤

##如果只想要1级菜单,那么只需要直接在默认的shell下直接创建即可

             


## 路径参数

这个是路径后参数的具体效果

### 多级菜单实现(注册表)

  1. Web

  2. shell

  3. Demo

  4. shell

  5. vscode

  6. command

### 如果还想继续创造更多级菜单,一样的原理啦!

## 效果图

 

 

出处:https://blog.csdn.net/mzYangMao/article/details/82912913

=======================================================================================

注册表管理右键菜单--菜单图标、菜单名、菜单快捷键、菜单位置、是否有子菜单

tips:快速定位文件位置

  • 随便选中一个文件,中文输入相应的文件名,可快速定位文件位置
    在这里插入图片描述
    在这里插入图片描述

目标:右键空白处打开对应软件

在这里插入图片描述

步骤

  1. win + R 打开运行,输入 regedit,快速启动注册表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

目标:实现右键以**软件打开文件夹

在这里插入图片描述

步骤:

  1. win + R 打开运行,输入 regedit,快速启动注册表
  2. 操作步骤同上,只是修改的文件路径有所不同
    在这里插入图片描述
    在这里插入图片描述

 

 

出处:https://blog.csdn.net/VOID_Pointer_G/article/details/107482802

=======================================================================================

Windows特定文件添加右键菜单(一)

最近尤其项目需要想给文件添加一个右键菜单,当且仅当右键该文件的时候,右键菜单显示“XXXXTest”

原本以为添加一个右键菜单是一个很简单的事情,添加一个command命令即可,但是后来发现command有一定局限性,最终采用了shell handler方式

添加右键菜单有两种方式:

 

  1. 静态添加,即添加shell+command实现
  2. 动态添加,即添加Shortcut menu handler实现

 

  • 静态添加

一个command命令可以添加给某一个应用程序关联的文件类型a File Type ProgID 或者某一系统子项Windows Subkey

应用程序注册的关联文件类型

 

系统默认提供的SubKey

上述添加右键菜单有一个局限性就是没有针对某一个特定文件添加右键菜单,通过上述方式添加的右键菜单都是一类型文件共有

显然我们遇到的问题,微软肯定也收到多类似需求并提供了方法:win7之后的系统可以通过添加特定条件Advanced Query Syntax来满足这类需求

因此我们可以给command添加子健AppliesTo限定我们右键添加的条件,如果一个文件名称中包含exampleText1,那么此右键功能是可以的

通过这种方法有一定的局限性,第一限定性比较强,第二win7之前的系统并不支持例如XP

静态添加右键菜单还有很多技巧,例如级联菜单、shift菜单、以及其他接口方法等,静态添加右键菜单简单方便易维护,具体的可以查看MSDN文档

  • 动态添加

有静态方式就有动态方式,动态方式就是通过windows系统外壳接口实现动态添加右键菜单,静态方式简单方便,动态方式灵活复杂,menu handler 可以动态判断是否添加右键菜单,自定义复杂的右键响应功能

实现menu handler之后,explorer加载的时候会调用我们实现的接口,动态添加右键功能以及响应右键功能

menu handler其实是一个COM组件的dll,具体实现后面再讲,网上也有很多类似的资料

实现menu handler主要实现两个接口IShellExtInit和IContextMenu

STDMETHODIMP Initialize(LPCITEMIDLIST, LPDATAOBJECT, HKEY):初始化接口,可以获取右键目标,自定义是否需要添加右键功能,本例中通过此函数判断目标文件名,如果右键的是我们的对象则添加右键菜单,否则不添加

STDMETHODIMP GetCommandString(UINT_PTR, UINT, UINT*, LPSTR, UINT):系统帮助信息接口,本例中不提供帮助信息直接返回

STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO):右键菜单响应接口,当点击右键菜单时执行,本例中我们直接调用第三方exe显示版本信息

STDMETHODIMP QueryContextMenu(HMENU, UINT, UINT, UINT, UINT):右键菜单添加接口,本例中添加一个右键菜单

接口具体用法和参数说明可以查阅MSDN

参看文献:

https://msdn.microsoft.com/zh-cn/library/windows/desktop/cc144169(v=vs.85).aspx

https://docs.microsoft.com/zh-cn/windows/desktop/shell/context-menu-handlers

 

出处:https://blog.csdn.net/yang382197207/article/details/79712166

 

Windows特定文件添加右键菜单(二)

给右键添加菜单项,微软首先推荐静态方式,即给文件类型或者系统子健添加一个conmmand命令

如果要添加一个右键菜单项,首先考虑添加范围,1)某一系统子健(系统所有文件、系统所有目录、系统空白右键、shift右键等);2)某一文件类型添加

  • 系统子健添加

系统子健列表
常用的子健:
HKEY_CLASSES_ROOT*:系统所有文件,右键系统任一文件都会添加右键菜单
HKEY_CLASSES_ROOT\AllFilesystemObjects:系统所有文件和文件夹,右键任一文件或者文件夹都会添加右键菜单
HKEY_CLASSES_ROOT\Folder:系统所有文件夹,右键系统任一文件夹都会添加右键菜单
HKEY_CLASSES_ROOT\Directory:系统所有目录,右键系统任一文件夹都会添加右键菜单
HKEY_CLASSES_ROOT\Directory\Background:系统文件夹空白处右键,在文件夹内空白处右键都会添加右键菜单
其他详情参考MSDN

具体在何处添加,根据自己需求处理,有可能会在多处都添加;有兴趣的可以仔细看一下自己的注册表,或者用“右键管理工具”把右键功能全部列出来,有的右键可能在多个子健下都有添加,或者同一类型的右键功能可能是在不同子健下添加的

以HKEY_CLASSES_ROOT*为例
这里写图片描述
效果如下所示
这里写图片描述

command数据可以添加参数,具体使用细节可以查考相关资料,下面给上述添加一个参数接受文件名称,在命令之后添加%1接受文件名称

这里写图片描述

  • 某一文件类型添加

    给某一文件类型添加右键菜单,首先要注册文件类型,给系统注册自己的文件类型,指明文件后缀名
    这里写图片描述
    同时添加文件关联子项,注册右键菜单
    这里写图片描述
    效果如下
    这里写图片描述

  • 特定文件添加右键菜单

前面示例都是如何添加文件菜单,但是都是给某一类型文件添加的右键菜单,如果想给某个特定文件添加右键菜单可以通过添加值“AppliesTo”来实现简单过滤
这里写图片描述
因此我们可以给command添加子健AppliesTo限定我们右键添加的条件,如果一个文件名称中包含exampleText1,那么此右键功能是可以的
这里写图片描述
上述三个文件只有在右键”myTest.MyFileType”的时候才会有右键菜单,右键其他两个不会有右键菜单

AppliesTo的局限性在于只支持win7之后的系统,win7之前的系统不支持

 

出处:https://blog.csdn.net/yang382197207/article/details/80079052

 

Windows特定文件添加右键菜单(三)

Menu Handler实现右键菜单控制

微软提供了一系列强大并且灵活Handler供开发者使用,帮助我们实现更加多样化的功能;在shell执行命令或者工作之前,留给开发者一个机会来自定义实现;

关联文件类型或者可以指定文件类型的handler

这里写图片描述

没有关联文件类型但是可以被调用的Handler
这里写图片描述

我们的目标是添加右键菜单,也就是Shortcut menu Handler,在文件右键菜单显示之前,自定义添加右键菜单

我用的开发平台是VS2010,VS创建ATL COM组件的方法网上很多,也可以用其他工具,平台没有局限性
具体实现接口建议参考官方文档:
https://docs.microsoft.com/zh-cn/windows/desktop/shell/shortcut-menu-using-dynamic-verbs

实现menu handler主要实现两个接口IShellExtInit和IContextMenu

    // IShellExtInit
    STDMETHODIMP Initialize(LPCITEMIDLIST, LPDATAOBJECT, HKEY);
    // IContextMenu
    STDMETHODIMP GetCommandString(UINT_PTR, UINT, UINT*, LPSTR, UINT);
    STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO);
    STDMETHODIMP QueryContextMenu(HMENU, UINT, UINT, UINT, UINT);

STDMETHODIMP Initialize(LPCITEMIDLIST, LPDATAOBJECT, HKEY):初始化接口,可以获取右键目标,自定义是否需要添加右键功能,本例中通过此函数判断目标文件名,如果右键的是我们的对象则添加右键菜单,否则不添加

TDMETHODIMP CMenuHandler::Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDataObj, HKEY hProgID)
{
    FORMATETC   fmt = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
    STGMEDIUM   stg = { TYMED_HGLOBAL };
    HDROP       hDrop = NULL;

    if (NULL == pDataObj)
        return E_INVALIDARG;

    // 从IDataObject接口中获取CF_HDROP数据
    if (FAILED(pDataObj->GetData(&fmt, &stg)))
        return E_INVALIDARG;

    // 获取指向实际数据的指针
    hDrop = (HDROP)GlobalLock(stg.hGlobal);
    if (hDrop == NULL)
    {
        ReleaseStgMedium(&stg);
        return E_INVALIDARG;
    }

    // 查询选择的文件数量
    UINT uFilesCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);

    if (1 != uFilesCount)
    {
        GlobalUnlock(stg.hGlobal);
        ReleaseStgMedium(&stg);
        return E_INVALIDARG;
    }

    // 将文件名称保存在变量中
    DragQueryFile(hDrop, 0, m_szFilename, MAX_PATH);

    // 判断名称是否包含GCCP5 以及是否存在exe
    TCHAR *sGCCP64 = _T("XXXX64.exe");
    TCHAR *sGCCP = _T("XXXX.exe");

    HRESULT state = E_INVALIDARG;
    if (_tcsstr(m_szFilename, sGCCP64) && (needCheckVersionInfo(TRUE)))
    {
        // 64位版本
        state = S_OK;
    }
    else if (_tcsstr(m_szFilename, sGCCP) && (needCheckVersionInfo(FALSE)))
    {
        // 32位版本
        state = S_OK;
    }
    else
    {
        // 不是目标程序  不添加右键
        state = E_INVALIDARG;
    }

    GlobalUnlock(stg.hGlobal);
    ReleaseStgMedium(&stg);
    return state;
}

STDMETHODIMP GetCommandString(UINT_PTR, UINT, UINT*, LPSTR, UINT):系统帮助信息接口,本例中不提供帮助信息直接返回

STDMETHODIMP CMenuHandler::GetCommandString(UINT_PTR idCmd, UINT uFlags, UINT* pwReserved, LPSTR pszName, UINT cchMax)
{
    // 不实现 不提供帮助信息
    return E_NOTIMPL;
}

STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO):右键菜单响应接口,当点击右键菜单时执行,本例中我们直接调用第三方exe显示版本信息

STDMETHODIMP CMenuHandler::InvokeCommand(LPCMINVOKECOMMANDINFO pCmdInfo)
{
    if (0 != HIWORD(pCmdInfo->lpVerb))
        return E_INVALIDARG;

    switch (LOWORD(pCmdInfo->lpVerb))
    {
    case 0:
    {
        // dll注册是根据系统位数来的,但是调用exe位数得根据版本来
        DWORD dwRet, dwErr;
        LPTSTR pszOldVal = NULL;
        LPTSTR pszNewVal = NULL;
        BOOL fExist;

        pszOldVal = (LPTSTR)malloc(BUFSIZE*sizeof(TCHAR));

        if (NULL == pszOldVal)
        {
            return E_INVALIDARG;
        }

        //  获取当前环境变量
        dwRet = GetEnvironmentVariable(_T("Path"), pszOldVal, BUFSIZE);

        if (0 == dwRet)
        {
            // 获取失败 没有拿到该环境变量
            dwErr = GetLastError();
            if (ERROR_ENVVAR_NOT_FOUND == dwErr)
            {
                fExist = FALSE;
            }
        }
        else if (BUFSIZE < dwRet)
        {
            // Path路劲太长,缓存大小不够,从新根据dwRet大小分配
            pszOldVal = (LPTSTR)realloc(pszOldVal, dwRet*sizeof(TCHAR));
            if (NULL == pszOldVal)
            {
                return E_INVALIDARG;
            }
            // 获取环境变量
            dwRet = GetEnvironmentVariable(_T("Path"), pszOldVal, dwRet);

            if (!dwRet)
            {
                // 获取失败 没有拿到环境变量
                fExist = FALSE;
            }
            else
            {
                fExist = TRUE;
            }
        }
        else
        {
            // 直接获取环境变量
            fExist = TRUE;
        }

        // MessageBox(pCmdInfo->hwnd, pszOldVal, _T("Test"), MB_OK);

        // 追加Bin目录到环境变量
        pszNewVal = (LPTSTR)malloc((dwRet + MAX_PATH)*sizeof(TCHAR));

        if (NULL == pszNewVal)
        {
            if (!pszOldVal)
            {
                free(pszOldVal);
                pszOldVal = NULL;
            }
            return E_INVALIDARG;
        }

        _tcsncpy_s(pszNewVal, (dwRet + MAX_PATH), m_szBinname, _tcslen(m_szBinname));
        _tcscat_s(pszNewVal, (dwRet + MAX_PATH), _T(";"));
        _tcscat_s(pszNewVal, (dwRet + MAX_PATH), pszOldVal);

        // MessageBox(pCmdInfo->hwnd, pszNewVal, _T("Test"), MB_OK);

        if (!SetEnvironmentVariable(_T("Path"), pszNewVal))
        {
            // 环境变量设置失败 exe是无法启动的 直接退出
            if (!pszOldVal)
            {
                free(pszOldVal);
                pszOldVal = NULL;
            }
            if (!pszNewVal)
            {
                free(pszNewVal);
                pszNewVal = NULL;
            }
            return E_INVALIDARG;
        }

        try
        {
            UINT code = (UINT)ShellExecute(pCmdInfo->hwnd, _T("open"), m_szExename, _T(""), m_szBinname, SW_SHOWNORMAL);
        }
        catch (...)
        {

        }

        // 重置环境变量
        if (fExist)
        {
            if (!SetEnvironmentVariable(_T("Path"), pszOldVal))
            {
                return E_INVALIDARG;
            }
        }
        else
        {
            SetEnvironmentVariable(_T("Path"), NULL);
        }

        // 内存释放
        if (!pszOldVal)
        {
            free(pszOldVal);
            pszOldVal = NULL;
        }
        if (!pszNewVal)
        {
            free(pszNewVal);
            pszNewVal = NULL;
        }

        break;
    }
    default:
    {
        return E_INVALIDARG;
        break;
    }
    }
    return S_OK;
}

STDMETHODIMP QueryContextMenu(HMENU, UINT, UINT, UINT, UINT):右键菜单添加接口,本例中添加一个右键菜单

STDMETHODIMP CMenuHandler::QueryContextMenu(HMENU hmenu, UINT uMenuIndex, UINT uidFirstCmd, UINT uidLastCmd, UINT uFlags)
{
    if (uFlags & CMF_DEFAULTONLY)
        return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 0);

    // 添加菜单
    InsertMenu(hmenu, uMenuIndex, MF_BYPOSITION, uidFirstCmd, _T("查看版本信息"));

    return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 1);
}

DLL创建完成之后,进行注册,测试效果OK,如果需要版本有安装程序,安装时候将dll注册

刚开始做的时候网上搜了很多人的例子,但是自己没有成功,之后将查看文档搞懂接口之后其实工作量不大,中间也遇到一些傻瓜式问题
1)dll注册的时候,64位注册64Dll,32位注册32位dll
2)32位dll无法注册成功:平台工具集要选择支持XP的平台工具集
3)dll被占用无法删除:可以进行重命名移动

 

出处:https://blog.csdn.net/yang382197207/article/details/80224906

=======================================================================================

Windows10下设置Shift+右键自定义菜单

我发现在windows10系统中,默认的shift+鼠标右键只会出现PowerShell的打开命令,但是在实际使用过程中,有时候cmd中可以正常运行的指令在PowerShell中却无法运行,而且默认打开的PowerShell并不具备管理员权限,因此想要设置将cmd可以通过shift+鼠标右键选择打开,网上方法很多,亲自试了一些,由于涉及到注册表,当然是设置后想要移除时可以干净的移除最好啦。总结了一下,提供简单方便的方式来实现目的。具体如下。

1.shift+鼠标右键添加在当前目录打开cmd(非管理员)

记事本→新建文本文档,输入下面内容,

Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere]
[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere]
@="在此处打开命令行窗口"
"Extended"=""
 
[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere\command]
@="cmd.exe -noexit -command Set-Location -literalPath '%V'"

保存后文件重命名为OpenCmdHere.reg,双击文件运行即可。

 

2.shift+鼠标右键移除在当前目录打开cmd(非管理员)

如果你需要移除第1步中的操作,也很简单,记事本→新建文本文档,输入下面内容,

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere]

保存后文件重命名为RemoveCmdHere.reg,双击文件运行即可。

 

3.shift+鼠标右键添加在当前目录打开cmd(管理员身份)

记事本→新建文本文档,输入下面内容,

Windows Registry Editor Version 5.00
 
[-HKEY_CLASSES_ROOT\Directory\Background\shell\runas]
 
[HKEY_CLASSES_ROOT\Directory\Background\shell\runas]
@="在此处打开命令行窗口(管理员)"
"Extended"=""
"HasLUAShield"=""
 
[HKEY_CLASSES_ROOT\Directory\Background\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""
 
[-HKEY_CLASSES_ROOT\Drive\shell\runas]
 
[HKEY_CLASSES_ROOT\Drive\shell\runas]
@="在此处打开命令行窗口(管理员)"
"Extended"=""
"HasLUAShield"=""
 
[HKEY_CLASSES_ROOT\Drive\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""
 
[-HKEY_CLASSES_ROOT\LibraryFolder\background\shell\runas]
 
[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\runas]
"Extended"=""
"HasLUAShield"=""
@="在此处打开命令行窗口(管理员)"
 
[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""

保存后文件重命名为OpenCmdHereAsAdmin.reg,双击文件运行即可。

 

4.shift+鼠标右键移除在当前目录打开cmd(管理员)

如果你需要移除第3步中的操作,也很简单,记事本→新建文本文档,输入下面内容,

Windows Registry Editor Version 5.00
 
[-HKEY_CLASSES_ROOT\Directory\shell\runas]
 
[-HKEY_CLASSES_ROOT\Directory\Background\shell\runas]
 
[-HKEY_CLASSES_ROOT\Drive\shell\runas]
 
[-HKEY_CLASSES_ROOT\LibraryFolder\background\shell\runas]

保存后文件重命名为RemoveCmdHereAsAdmin.reg,双击文件运行即可。

 

补充:

1、HasLUAShield:By creating a registry value named HasLUAShield (REG_SZ) on the static verb, you can add the UAC shield icon to the corresponding item in the right-click menu.
参考:https://www.winhelponline.com/blog/add-uac-shield-icon-right-click-context-menu-windows-7/

2、pushd:The Pushd command stores the current directory for use by the popd command, and then changes to the specified directory.
参考:http://www.windowscommandline.com/pushd/  和  https://baike.baidu.com/item/pushd/8514754?fr=aladdin

 

5.展示效果

添加前shift+鼠标右键如下:

添加完成后shift+鼠标右键如下:

记录一下,防止以后用到时不好找。

 

出处:https://blog.csdn.net/wyx0712/article/details/82120806

=======================================================================================

增加系统右键菜单

本文介绍添加系统右键菜单,效果如下图:

原理很简单就是给注册表添加值,以下是添加系统右键菜单所要涉及的值。

 

KEY值:
HKEY_CLASSES_ROOT\*\shell(所有文件的右键菜单)
HKEY_CLASSES_ROOT\directory\shell(所有文件目录的右键菜单)


具体操作:新建项【右键名称(ex:文件粉碎器)】 => 新建项【Command(启动命令,编辑设置值为启动程序物理路径+“ %1”)】

C# 获取系统右键菜单的文件目录代码:Environment.CommandLine。

 

《完》

 

出处:http://www.cnblogs.com/vipstone/archive/2011/12/31/2308880.html

=======================================================================================

自己写的几个示例,自己参考着改改吧

1、运行exe程序,并且带命令行参数

1)直接注册系统右键菜单

@echo off
set batpath=\"D:\Program Files\webserver4.0\webserver4.0.exe\" /port:9090 /path:\"%%1\"
REG Delete HKEY_CLASSES_ROOT\Directory\shell\测试IIS /f
REG ADD HKEY_CLASSES_ROOT\Directory\shell\测试IIS\command /ve /t REG_SZ /d "%batpath%"

 

2)先写好bat程序,如下:

@echo off
set /a p=%random%%%(10600-10500+1)+10500
set batpath="D:\Program Files\webserver4.0\webserver4.0.exe" /port:%p% /path:"%1"

taskkill /F /IM webserver4.0.exe
start "" %batpath%
echo http://localhost:%p%/
::start http://localhost:%p%/

 

再注册系统右键菜单:

原理:把需要执行的的bat命令写入command默认值上,就可以执行了

方式一:会显示黑色命令行窗口

@echo off
set batpath=\"%cd%\RunWebService.bat\" \"%%1\"
REG Delete HKEY_CLASSES_ROOT\Directory\shell\测试IIS /f
REG ADD HKEY_CLASSES_ROOT\Directory\shell\测试IIS\command /ve /t REG_SZ /d "%batpath%"

 

方式二:

@echo off
set batpath=mshta vbscript:createobject(\"wscript.shell\").run(\"C:\t1\RunWebService.bat %%1\",0)(window.close)

REG Delete HKEY_CLASSES_ROOT\Directory\shell\测试IIS /f
REG ADD HKEY_CLASSES_ROOT\Directory\shell\测试IIS\command /ve /t REG_SZ /d "%batpath%"

 

方式三:

mshta javascript:new ActiveXObject("WScript.Shell").Run("cmd /c C:\t1\RunWebService.bat D:\Publish\TestWeb\TestShareFile",0);window.close()

 

方式四:使用start的/b选项

start "" /b "C:\t1\aa.bat" 

 

懂得了上面的原理,就可以自己写右键菜单的命令

方式三和方式四,我自己没有测试过,有需要的自己去研究吧

 

说明:直接注册系统右键菜单的方式比较死板,简单,如果使用第二种方式,中间多一个bat就可以做很多事情了,其他的留给你们自己去发挥

 

 

2、执行bat程序,可以带参数

如下内容,保存到  test.bat 文件

@echo off
cls
echo.
echo 程序正在初始化. . .
echo.
echo %%1=%1
pause

注册系统右键菜单

@echo off
set batpath=\"%cd%\test.bat\" \"%%1\"
REG Delete HKEY_CLASSES_ROOT\Directory\shell\测试 /f
REG ADD HKEY_CLASSES_ROOT\Directory\shell\测试\command /ve /t REG_SZ /d "%batpath%"

 

3、创建自定义执行程序,并且分组

@echo off

rem 注册文件夹空白处右键菜单
reg delete HKEY_CLASSES_ROOT\Directory\Background\Shell\测试分组 /f
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\测试分组 /v SubCommands /f
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\测试分组 /v icon /f /d "D:\Program Files\XMind 8 Update 7\workspace\.metadata\.plugins\org.xmind.ui.toolkit\webImages\0vsdbqg7htr08dc3a8793dksgu.ico"

rem 注册文件夹右键菜单
reg delete HKEY_CLASSES_ROOT\Directory\Shell\测试分组 /f
reg add    HKEY_CLASSES_ROOT\Directory\Shell\测试分组 /v SubCommands /f
reg add HKEY_CLASSES_ROOT\Directory\Shell\测试分组 /v icon /f /d "D:\Program Files\XMind 8 Update 7\workspace\.metadata\.plugins\org.xmind.ui.toolkit\webImages\0vsdbqg7htr08dc3a8793dksgu.ico"

rem 注册【删除空文件夹】命令
set batpath=\"E:\Bat脚本\DelEmptyFolder.bat\" \"%%w\"
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\测试分组\shell\删除空文件夹\command /ve /t REG_SZ /d "%batpath%" /f
set batpath=\"E:\Bat脚本\DelEmptyFolder.bat\" \"%%1\"
REG ADD HKEY_CLASSES_ROOT\Directory\shell\测试分组\shell\删除空文件夹\command /ve /t REG_SZ /d "%batpath%" /f

rem 注册【webserver】命令
::set batpath=\"D:\Program Files\webserver4.0\webserver4.0.exe\" /port:9090 /path:\"%%1\"
set batpath=mshta vbscript:createobject(\"wscript.shell\").run(\"C:\t1\RunWebService.bat %%w\",0)(window.close)
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\测试分组\shell\测试IIS\command /ve /t REG_SZ /d "%batpath%" /f
set batpath=mshta vbscript:createobject(\"wscript.shell\").run(\"C:\t1\RunWebService.bat %%1\",0)(window.close)
REG ADD HKEY_CLASSES_ROOT\Directory\shell\测试分组\shell\测试IIS\command /ve /t REG_SZ /d "%batpath%" /f

pause
View Code

 优化了使用快捷键、自定义右键菜单名称、右键菜单位置等

@echo off

set batpath=\"%cd%\aa.bat\" \"%%1\"
REG Delete HKEY_CLASSES_ROOT\Directory\shell\测试 /f
REG ADD HKEY_CLASSES_ROOT\Directory\shell\测试\command /ve /t REG_SZ /d "%batpath%"
REG Delete HKEY_CLASSES_ROOT\Directory\shell\测试 /f

rem 注册文件夹空白处菜单
reg delete HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组 /f
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组 /v MUIVerb /f /d "常用Bat工具组(&Q)"
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组 /v position /f /d "top"
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组 /v SubCommands /f
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组 /v Extended /f
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组 /v icon /f /d "D:\Program Files\XMind 8 Update 7\workspace\.metadata\.plugins\org.xmind.ui.toolkit\webImages\0vsdbqg7htr08dc3a8793dksgu.ico"

rem 注册文件夹右键菜单
reg delete HKEY_CLASSES_ROOT\Directory\Shell\常用Bat工具组 /f
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组 /v MUIVerb /f /d "常用Bat工具组(&Q)"
reg add    HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组 /v position /f /d "top"
reg add    HKEY_CLASSES_ROOT\Directory\Shell\常用Bat工具组 /v SubCommands /f
reg add    HKEY_CLASSES_ROOT\Directory\Shell\常用Bat工具组 /v Extended /f
reg add HKEY_CLASSES_ROOT\Directory\Shell\常用Bat工具组 /v icon /f /d "D:\Program Files\XMind 8 Update 7\workspace\.metadata\.plugins\org.xmind.ui.toolkit\webImages\0vsdbqg7htr08dc3a8793dksgu.ico"

rem 注册【删除空文件夹】命令
set batpath=\"%cd%\DelEmptyFolder.bat\" \"%%w\"
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组\shell\删除空文件夹 /v MUIVerb /f /d "删除空文件夹(&D)"
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组\shell\删除空文件夹\command /ve /t REG_SZ /d "%batpath%" /f
set batpath=\"%cd%\DelEmptyFolder.bat\" \"%%1\"
reg add HKEY_CLASSES_ROOT\Directory\Shell\常用Bat工具组\shell\删除空文件夹 /v MUIVerb /f /d "删除空文件夹(&D)"
REG ADD HKEY_CLASSES_ROOT\Directory\shell\常用Bat工具组\shell\删除空文件夹\command /ve /t REG_SZ /d "%batpath%" /f

rem 注册【webserver】命令
::set batpath=\"D:\Program Files\webserver4.0\webserver4.0.exe\" /port:9090 /path:\"%%1\"
set batpath=mshta vbscript:createobject(\"wscript.shell\").run(\"%cd%\RunWebService.bat %%w\",0)(window.close)
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组\shell\测试IIS /v MUIVerb /f /d "测试IIS(&I)"
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组\shell\测试IIS\command /ve /t REG_SZ /d "%batpath%" /f
set batpath=mshta vbscript:createobject(\"wscript.shell\").run(\"%cd%\RunWebService.bat %%1\",0)(window.close)
reg add HKEY_CLASSES_ROOT\Directory\Shell\常用Bat工具组\shell\测试IIS /v MUIVerb /f /d "测试IIS(&I)"
REG ADD HKEY_CLASSES_ROOT\Directory\shell\常用Bat工具组\shell\测试IIS\command /ve /t REG_SZ /d "%batpath%" /f

rem 注册【在此打开CMD命令】命令
set batpath=cmd.exe /s /k pushd \"%%V\"
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组\shell\在此打开CMD /v MUIVerb /f /d "在此打开CMD(&C)"
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组\shell\在此打开CMD\command /ve /t REG_SZ /d "%batpath%" /f
::set batpath=cmd.exe -noexit -command Set-Location -literalPath '%V'
reg add HKEY_CLASSES_ROOT\Directory\Shell\常用Bat工具组\shell\在此打开CMD /v MUIVerb /f /d "在此打开CMD(&C)"
REG ADD HKEY_CLASSES_ROOT\Directory\shell\常用Bat工具组\shell\在此打开CMD\command /ve /t REG_SZ /d "%batpath%" /f


rem 注册【切换Wifi连接】命令
set batpath=mshta vbscript:createobject(\"wscript.shell\").run(\"%cd%\Wifi切换.bat\",0)(window.close)
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组\shell\切换Wifi连接 /v MUIVerb /f /d "切换Wifi连接(&W)"
reg add HKEY_CLASSES_ROOT\Directory\Background\Shell\常用Bat工具组\shell\切换Wifi连接\command /ve /t REG_SZ /d "%batpath%" /f

pause
View Code

 

posted on 2018-02-01 13:39  jack_Meng  阅读(4668)  评论(0编辑  收藏  举报

导航