Windows资源管理器右键单击文件和文件夹的上下文菜单

时间:2013-12-23 09:46:51

标签: c++ windows shell contextmenu windows-explorer

我的问题类似于this,但这并没有提供我需要的所有信息,或者我对此并不了解。

我希望在文件上下文菜单中可以选择通知我的应用程序。

我添加了键:

HKLM/SOFTWARE/Classes/*/shell/MyApp/command::"C:\\path\\test.exe" "%1"
HKLM/SOFTWARE/Classes/Folder/shell/MyApp/command::"C:\\path\\test.exe" "%1"

测试代码:

#include <iostream>

int main(int argc, char *argv[])
{
    for (int i = 1; i < argc; ++i)
        std::cout << argv[i] << "\r\n";
    system("pause");
    return 0;
}

这很好,但是......如果我标记了几个文件/文件夹并右键单击并选择我添加的选项,则会启动许多测试应用程序。

这不是我想要的行为,我希望所有路径都会作为argv的列表传递到我的应用的单个实例中,有谁知道该怎么做?

顺便说一句。我正在使用C++进行编码,但我认为这与Windows shell的业务无关。

感谢。

1 个答案:

答案 0 :(得分:3)

我认为正确的方法是编写ContextMenuHandler并将其注册为shell扩展。

您可以找到很多样本,例如hereherehere

上下文菜单处理程序在密钥

下注册
HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers

关于SO也有类似的问题:

How to pass in multiple file/folder paths via a right-click event (verb) to an executable?

How to Pass MULTIPLE filenames to a Context Menu Shell Command?

Windows context menu for multiple files [C++]

Taking multiple files (arguments) from Windows shell context menu on C#