C++实现添加桌面右键新建菜单

请看下面的“C++实现添加桌面右键新建菜单”的完整攻略。

一、方案概述

添加桌面右键新建菜单主要通过在注册表中添加相应键值来实现。当用户在桌面右键点击新建时,系统就会在注册表中找到相应的键值,展示出新增的菜单。

二、实现步骤

1. 创建注册表键值

我们需要在如下路径创建一个KEY,用于存放新增的菜单项的信息:

HKEY_CLASSES_ROOT\Directory\Background\shell

具体步骤如下:

  • 使用 RegOpenKeyEx 函数打开 HKEY_CLASSES_ROOT\Directory\Background\shell
  • 使用 RegCreateKeyEx 函数在 shell 键下创建子键,键名为你希望在右键菜单中显示的名称
  • 在新建的子键中创建 command 子键,键值为你想要执行的程序路径

示例代码:

HKEY hKey;
LONG lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("Directory\\Background\\shell"), 0, KEY_ALL_ACCESS, &hKey);

if (lRet == ERROR_SUCCESS)
{
    // 添加右键菜单项,例如“TestMenu”
    HKEY hSubMenuKey;
    lRet = RegCreateKeyEx(hKey, _T("TestMenu"), 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hSubMenuKey, NULL);
    if (lRet == ERROR_SUCCESS)
    {
        // 添加要执行的命令,比如添加notepad.exe
        HKEY hCommandKey;
        lRet = RegCreateKeyEx(hSubMenuKey, _T("command"), 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hCommandKey, NULL);
        if (lRet == ERROR_SUCCESS)
        {
            TCHAR szCmd[MAX_PATH] = { 0 };
            _stprintf(szCmd, _T("\"%s\""), _T("notepad.exe"));
            lRet = RegSetValueEx(hCommandKey, NULL, 0, REG_SZ, (BYTE*)szCmd, (_tcslen(szCmd) + 1) * sizeof(TCHAR));
            RegCloseKey(hCommandKey);
        }
        RegCloseKey(hSubMenuKey);
    }
    RegCloseKey(hKey);
}

2. 刷新资源管理器

注册表的修改需要刷新资源管理器才能生效,所以我们需要向系统发出更新 shell32.dll 的命令,刷新资源管理器。

示例代码:

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);

三、总结

这样,我们就可以通过在注册表中添加相应键值,实现在桌面右键菜单中添加自定义的菜单项了。

四、示例说明

下面是两个示例,分别讲解如何添加常用的文本编辑器 Sublime Text 和 VSCode 到右键新建菜单中。

示例1:添加 Sublime Text

要实现将 Sublime Text 添加到右键新建菜单中,可以按照如下步骤操作:

  1. 在注册表中创建新的键值

HKEY_CLASSES_ROOT\Directory\Background\shell\SublimeText\command

  1. 设置键值

"C:\Program Files\Sublime Text 3\sublime_text.exe" "%V"

  1. 使用上述示例代码,将 Sublime Text 添加到右键新建菜单中。

示例2:添加 VSCode

要实现将 VSCode 添加到右键新建菜单中,可以按照如下步骤操作:

  1. 在注册表中创建新的键值

HKEY_CLASSES_ROOT\Directory\Background\shell\VSCode\command

  1. 设置键值

"C:\Program Files\Microsoft VS Code\Code.exe" "%V"

  1. 使用上述示例代码,将 VSCode 添加到右键新建菜单中。

这样,我们就可以通过以上操作实现在右键菜单中添加 Sublime Text 和 VSCode 了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现添加桌面右键新建菜单 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • FTP主动模式和被动模式区别详解

    FTP主动模式和被动模式区别详解 概述 FTP(File Transfer Protocol)是一种传输文件的协议。在FTP协议中,有两种不同的传输模式,即FTP主动模式和被动模式。这两种模式都具有自己的优势和弱点。 FTP主动模式 FTP主动模式是最常用的模式。在FTP主动模式中,数据传输端口是客户端向FTP服务器开放的。这意味着FTP服务器向客户端主动发…

    other 2023年6月27日
    00
  • Android 对话框(Dialog)大全详解及示例代码

    Android 对话框(Dialog)大全详解及示例代码 什么是 Android 对话框(Dialog)? Android 对话框(Dialog)是一种常用的用户界面元素,用于向用户显示重要信息、接收用户输入或进行用户确认。对话框通常以弹出窗口的形式出现,覆盖在当前活动或片段之上。 常见的 Android 对话框类型 1. 提示对话框(AlertDialog…

    other 2023年8月23日
    00
  • JS组件系列之Bootstrap table表格组件神器【终结篇】

    下面我就来详细讲解一下“JS组件系列之Bootstrap table表格组件神器【终结篇】”的完整攻略。 一、概述 在本文中,将会介绍 Bootstrap table 表格组件的各种应用,以及如何基于此制作出功能更加完善、样式更加美观的表格组件。 二、Bootstrap table表格组件 Bootstrap table 表格组件是 Bootstrap 中非…

    other 2023年6月20日
    00
  • Spring中@Autowired注解在不同方法的写法示例

    Spring中@Autowired注解在不同方法的写法示例 @Autowired注解是Spring框架中用于自动装配依赖的注解。它可以用于不同的方法上,以实现依赖注入。下面是两个示例说明@Autowired注解在不同方法上的写法。 1. 构造方法上的@Autowired注解 @Service public class UserService { privat…

    other 2023年8月6日
    00
  • Win10不能关机或重启的四种解决方法(总有一个适合你)

    Win10不能关机或重启的四种解决方法(总有一个适合你) 近期有不少Win10用户反映无法正常关机或重启,可能是因为系统更新等原因导致的,这给用户的正常使用带来不小的困难,下面我们就来介绍一下针对Win10不能关机或重启的四种解决方法,希望对大家有所帮助。 方法一:使用CMD强制关机或重启 1.打开CMD命令终端:WIN+R,在运行框中输入cmd,回车打开2…

    other 2023年6月27日
    00
  • 如何恢复数据库的账号 登录名/用户名等

    下面是如何恢复数据库的账号的详细攻略: 1.使用管理员权限登录数据库服务器 在恢复数据库的账号之前,我们需要使用管理员权限登录数据库服务器。登录方式和具体操作步骤可能会因为不同的数据库而有所不同。 比如,对于SQL Server 2019,可以使用 SQL Server Management Studio 工具来登录数据库服务器。具体操作步骤如下: 打开 S…

    other 2023年6月27日
    00
  • WPS表格怎么插入复选框控件?

    下面是详细讲解“WPS表格怎么插入复选框控件”的完整攻略: 1. 插入复选框控件 在WPS表格中,插入复选框控件可以通过以下步骤完成: 首先在要插入复选框控件的单元格处单击右键,在弹出的快捷菜单中选择“控件”菜单。 在“控件”菜单中,选择“复选框控件”,即可在该单元格中插入一个复选框控件。 如果需要插入多个复选框控件,请依次重复上述操作即可。 2. 复选框控…

    other 2023年6月26日
    00
  • Android基础之Fragment与Activity交互详解

    Android基础之Fragment与Activity交互详解 背景介绍 在Android开发中,Activity是一个很常见且基础的组件,它可以被看作是应用程序中的一个窗口,用户与应用程序交互时,所看到的实际上就是Activity的内容。而Fragment是在Android 3.0之后才引入的,它可以被看作是Activity中的一个子页面,和Activit…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部