使 C++ 应用程序“以...打开”

Posted

技术标签:

【中文标题】使 C++ 应用程序“以...打开”【英文标题】:Making a C++ application "Opened with..." 【发布时间】:2015-04-14 18:20:29 【问题描述】:

我正在开发一个或多或少围绕重命名文件的 (C++) 程序。我想这样做,以便您可以选择一个文件,右键单击它并选择“打开方式”,然后选择我的应用程序。 我弄明白了上下文菜单部分,我只是不知道如何做 C++ 部分。

换句话说,如何制作一个可以与文件一起打开的程序(在C++中)(通过上下文菜单或直接打开)并处理这个文件?

示例: 在我的 Windows 中,我将“.roberto”扩展名与“C:\Program Files\MyProgram\MyProgram.exe”相关联。所以如果我打开一个“.roberto”文件,会弹出一个命令提示符,只显示所选文件的名称。

我希望这很清楚,我不知道如何解释。我在搜索这个问题时也遇到了一些麻烦,所以如果之前有人问过这个问题,请原谅我。 谢谢。

【问题讨论】:

c++ 的标准中没有任何处理此操作系统特定功能的内容。你用的是什么框架? winapi、MFC、Qt ...? 如果我没记错的话,选择是在argv 中传递的。不过,我已经很久没有做过类似的事情了。 对不起,我不知道我在使用什么框架...我怎么知道这个?我在 Visual Studio Express 2013 中编写并尝试保持设置不变。 :P 我试了一下argv。我制作了一个新程序,并保留了默认的int main(int argc, _TCHAR* argv[]),并打印了所有argv 元素。直接打开时我得到一个论点,使用“打开方式...”对话框打开时我得到两个论点。但是,这些argv 项目的内容只是随机的字母和数字,就像一个指针。 哦,解决了。将 _TCHAR* 更改为 char* 解决了它。 【参考方案1】:

在基于 MFC 的应用程序中的 Windows 平台上,这是由应用程序类的 InitInstance() 方法中的框架自动完成的:

EnableShellOpen();
RegisterShellFileTypes(TRUE);

重要提示:一般而言,此功能取决于框架和操作系统。

【讨论】:

我不太明白这个。我将如何使用它?我如何获得我正在寻找的文件路径?【参考方案2】:

我想通了!

使用给 main 的参数是线索。下面的程序如果直接打开会打印一行,这一行是程序本身的路径,如果用“Open with...”选项打开也会显示选中的文件。

#include "stdafx.h"
#include <iostream>
using namespace std;


int main(int argc, char* argv[])

    cout << "Argument count: " << argc << endl << endl;

    for (int i = 0; i < argc; i++)
    
        cout << argv[i] << endl;
    

    cout << endl << endl << endl << endl;

    system("pause");

    return 0;

【讨论】:

以上是关于使 C++ 应用程序“以...打开”的主要内容,如果未能解决你的问题,请参考以下文章

删除函数正在使程序崩溃 c++

使程序暂停或休眠C++的函数[重复]

使 C++ 应用程序可编写脚本

如何从 Clojure 调用 C++ 程序以使程序保持打开状态?

C++,如何使控制台应用程序在关闭后在后台工作?

如何使 JNI RegisterNatives callack Java 函数具有 C++ 实例范围?