如何关联指定类型的文件,双击该类型文件时自动打开我的程序?

0

怎样使我的程序关联一个类型的文件,比如txt,然后双击txt文件的时候自动打开我的程序来编辑它,然后我的程序就可以获得这个文件的路径并且对这个文件进行处理?

网上搜了一些资料,但是貌似没什么用。

补充:

控制台程序可以用argv参数,那MFC怎么做?

ava
huidong

2020-3-9

1

如果要实现双击某个类型的文件(比如 .txt2)然后自动启动你的程序打开,操作系统实际上执行的操作是:

  1. 用户双击某个 .txt2 文件。例如文件名为 D:\my.txt
  2. 操作系统从注册表查找 .txt2 类型的文件对应的应用程序是哪个,例如,找到的是:D:\App\Test\Test.exe
  3. 操作系统将用户双击的文件全路径以参数形式传递给关联的程序,会执行:D:\App\Test\Test.exe "D:\my.txt"

根据以上操作系统执行的步骤,你需要实现如下步骤:

  1. 你的程序有接收参数的能力。就是 main 里面的 argc 和 argv 参数。
  2. 你编译好的 .exe,要通过安装程序封装。安装程序里面写好注册文件类型的脚本。(推荐试试 inno setup 或 nsis setup 两个安装程序)。
  3. 其他用户拿到你的安装程序后,执行安装,安装程序将 .exe 拷贝到固定路径,并注册 .txt2 为该 .exe 打开。

注意:文件类型注册信息,需要写若干注册表项,如果初学,可能会把你的系统搞乱,请务必慎重操作。

补充:

关于 MFC 程序获取命令行参数的办法有很多种。例如:

  1. 通过 Windows API 函数 GetCommandLine(),可以得到包括 .exe 在内的完整命令行。
  2. 通过 __argc, __argv / __wargv 可以得到参数的数量和每一个参数。
  3. 通过 AfxGetApp()->m_lpCmdLine,可以得到不包含 .exe 在内的命令行。
  4. 通过 theApp.m_lpCmdLine,可以得到不包含 .exe 在内的命令行(本质上和方法 3 一样)。
  5. 通过 CCommandLineInfo。

具体用哪种方法,根据自己的需求来选择吧。

ava
慢羊羊

2020-3-9

谢谢! -  huidong  2020-3-10
技术讨论社区