使用ShellExecute在浏览器中打开文件

时间:2016-01-05 14:38:32

标签: c++ winapi

我正在尝试使用ShellExecute在默认浏览器中打开.txt文件。

我目前正在使用

{{1}}

这会在浏览器中正确创建一个新窗口,但会尝试打开

E / path / to / file.txt(没有":")

然后找不到关联的文件。文件位置绝对正确,因为手动添加":"回到浏览器中打开文件。

2 个答案:

答案 0 :(得分:1)

选项1

使用AssocQueryStringIQueryAssocations找出默认浏览器,然后在命令行中使用文本文件启动该浏览器。

选项2

创建一个临时.html文件,其<meta>标记为redirects到加载文本文件的file://网址。然后ShellExecute使用您的临时.html文件。由于临时文件的类型为.html,因此应加载用户的默认浏览器。然后重定向将导致浏览器加载文本文件。

诀窍是弄清楚何时清理临时文件。 ShellExecute并不能轻松掌握已启动的流程(实际上,您启动的流程可能只是启动另一个流程),因此您无法轻松了解浏览器的浏览时间用你的临时文件完成。您可能只是跟踪您创建的临时文件,并在应用程序关闭时尝试删除它们。

答案 1 :(得分:-2)

ShellExecute将在默认文本查看器中打开一个txt文件,我认为这不是一个浏览器。要在浏览器中打开,请明确运行浏览器并将该文件作为参数。例如:

ShellExecute(
    0,
    L"open",
    L"C:\\Program Files\\Internet Explorer\\iexplore",
    L"E:\\path\\to\\file.txt",
    0,
    1
);