背景:我想将我的应用程序添加到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扩展来解决。创建功能齐全的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)。这是如何运作的?我可以使用此行为并将其应用于我的应用程序吗?

最佳答案

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

关于c++ - “send to”如何管理输入参数? (视窗),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25387093/

10-14 17:07