ShellExecute 没有打开 HTML 文件

Posted

技术标签:

【中文标题】ShellExecute 没有打开 HTML 文件【英文标题】:ShellExecute isn't opening an HTML file 【发布时间】:2014-01-03 22:19:19 【问题描述】:
ShellExecute(NULL, TEXT("open"), TEXT("report\index.html"), NULL, NULL, SW_SHOWNORMAL);

以上是我的代码行,由于某种原因,我无法打开文件。以下是我尝试过的所有线路。

ShellExecute(NULL, TEXT("open"), TEXT("report/index.html"), NULL, NULL, SW_SHOWNORMAL);

ShellExecute(NULL, L"open", L"report\index.html", NULL, NULL, SW_SHOWNORMAL);

ShellExecute(NULL, _T("open"), _T("report\index.html"), NULL, NULL, SW_SHOWNORMAL);

下面是我所包含的列表。

// Windows Header Files:
#include <windows.h>

// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>

#include <Shellapi.h>

我的文件结构是这样的:

Downloads/test/program.exe
Downloads/test/report/index.html

这是第一次编写此代码,我真的不确定何时需要区分“/”和“\”。我相信我需要使用 TEXT() 因为当我进入我的 VS2010 项目时,属性 > 字符集它说:使用 Unicode 字符集。或者至少我相信我必须使用 TEXT(),我真的不确定。

我还需要提供文件的完整路径,而不是假设它是从我的 exe 所在的位置传输的吗?如果是这样,是否有一个快速简便的函数调用来获取完整的目录路径?它只是我缺少的一个包含文件吗?

【问题讨论】:

"\i" 不是反斜杠和 i。无论如何,TEXT 是用于TCHARs,你不应该使用它。只需使用宽字符串来调用 Windows API 函数,就像在第二个示例中一样。 哦,好吧,那么我需要用什么替换 \i 才能获得我想要的结果? 为动词传递 NULL 并使用默认动词。除非您仍然为 Win98 编译,否则不要使用 TCHAR。使用宽字符串。提供文件的完整路径。 【参考方案1】:

如果您传递的是硬编码路径,则该路径必须是 Windows 样式,带有反斜杠,当然反斜杠必须是两次才能转义。

ShellExecute(NULL, TEXT("open"), TEXT("report\\index.html"), NULL, NULL, SW_SHOWNORMAL);

如果您使用的不是完整路径,您当然必须确保从应用程序的当前工作目录实际可以访问该路径。

【讨论】:

以上是关于ShellExecute 没有打开 HTML 文件的主要内容,如果未能解决你的问题,请参考以下文章

用ShellExecute调用外部程序出现的程序无法正常打开的错误!

ShellExecute函数打开exe可执行文件问题

ShellExecute打开文件打开文件夹的用法

ShellExecute无法打开文件夹

尝试打开大于 10MB 的 mdb 文件时,ShellExecute() 返回错误代码 5

如何查找是不是可以通过 ShellExecute 打开文档?