“发送到”如何管理输入参数? (视窗)

时间:2014-08-19 15:17:04

标签: c++ windows registry contextmenu argument-passing

背景:我想将我的应用程序添加到Windows上下文菜单中,我通过向Windows注册表添加一个新密钥来完成此操作:

HKEY_CLASSES_ROOT\*\shell\myapp
HKEY_CLASSES_ROOT\*\shell\myapp\command

并指定"命令的默认值"我的exe的位置的关键,加上一个额外的参数:

value = "c:\users\john\myapp\myappexe.exe" "%1" arg1

它有效,我可以直接点击'任何文件并使用该文件运行我的应用程序。当我尝试选择多个文件时会出现问题,它会打开我所选应用文件的多个窗口,我希望能够使用我的程序的一个实例来处理所有输入。

我知道这可以通过创建已发布herehereherehere的外壳扩展来解决。创建一个完整的功能shell扩展超出了我的(小)项目的范围,我还没有找到我能理解的教程。

问题:我正在寻找解决方案,我发现一个程序来自"发送到" Windows中的文件夹能够处理多个文件,例如,如果我将此代码(c ++)的可执行文件放在C:\Users\john\AppData\Roaming\Microsoft\Windows\SendTo文件夹中,

#include <iostream>
using namespace std;

int main(int argc, char* argv[]){
    for(int i=0;i<=argc;i++){
        cout << argv[i] << endl;
    }
    return 0;
}

...选择一堆苍蝇,然后将它们拖到可执行文件中,我将进入一个窗口所有选定文件的路径(发送到tutorial )。这是如何运作的?我可以使用此行为并将其应用于我的应用程序吗?

1 个答案:

答案 0 :(得分:0)

一种方法是设计您的应用程序,以便任何新启动的实例都检查一个预先存在的实例(您可以使用互斥锁来执行此操作),然后将命令行参数转发给该实例,并封装在消息中某种。然后,原始实例可以采取适当的措施。