【问题标题】:Making a C++ application "Opened with..."使 C++ 应用程序“以...打开”
【发布时间】: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* 解决了它。

标签: c++ windows file associations


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多