【问题标题】:How to get c++ program to execute in response to file opening?如何让 c++ 程序响应文件打开而执行?
【发布时间】:2018-09-30 21:02:59
【问题描述】:

我编写了一个 c++ 程序,它可以将其内部状态以自定义类型的文件保存到磁盘。双击这种类型的文件后,如何让 Windows 运行我的程序?是否有向 main() 传递参数的方法,以便程序知道选择了哪个文件?

【问题讨论】:

  • 我相信这应该转移到超级用户?这是一个关于 Windows 默认程序的问题,而不是编程问题。
  • 这个SO article 可能会有所帮助
  • @Yksisarvinen:这是两个问题合二为一。第二部分(“将参数传递给 main() 的方法)显然是关于编程的。
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题。请参阅How to Ask 页面以获得澄清此问题的帮助。

标签: c++ file winapi


【解决方案1】:

如果您使用 Windows 资源管理器上下文菜单中的“运行方式...”,您可以选择您的应用程序二进制文件。

Windows 将提供绝对文件路径作为应用程序的第一个参数。

int main(int argc, char **argv)
{
  if (argc < 2)
    std::cout << "No argument" << std::endl;
  else
    std::cout << "Filename is " << argv[1] << std::endl;
}

为什么是 2 个参数?因为参数总是从 argv[1] 开始。 argv[0] 通常包含应用程序二进制文件的路径。

如果你调用"d:\MyApp.exe c:\MyImage.bmp" 那么

argc == 2
argv[0] == "d:\MyApp.exe"
argv[1] == "c:\MyImage.bmp"

【讨论】:

  • “因为 argv[0] 总是包含应用程序二进制文件的路径。” - 这不是真的。将路径名作为第一个命令行参数传递给可执行映像是一种约定,而不是严格的规则。如果您阅读CreateProcess 的文档,您会看到,对于可以作为第一个命令行参数传递的内容没有任何限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多