c ++ ShellExecute不工作
c++ ShellExecute not working
我正在开发一个 C++ 程序,它应该启动 Internet Explorer 并在 Windows 上显示本地 html 文件 7. 我正在尝试使用 ShellExecute,但它不起作用.我四处搜索,但找不到有效的答案。这是代码:
ShellExecute(NULL, "open", "start iexplore %userprofile%\Desktop\html_files\file.hml", NULL, NULL, SW_SHOWDEFAULT);
我将该命令复制到一个 system() 调用中,只是为了看看它是否会起作用,它确实起作用了。这是我试过的 system() 调用:
system("start iexplore %userprofile%\Desktop\html_files\file.html");
由于系统调用有效,这显然是 ShellExecute 的问题。基本上,Internet Explorer 不会出现。不过,一切都可以正确编译。有什么想法吗?
我认为 IE 不会识别 URI 中的环境变量。其实%
有特殊的意义。
像这样的东西应该可以工作:
#include <windows.h>
int main()
{
ShellExecute(NULL, "open",
"C:\progra~1\intern~1\iexplore.exe",
"file:///C:/Users/UserName/Desktop/html_files/file.html",
"",
SW_MAXIMIZE);
return 0;
}
另一种方法,获取 %userprofile% 环境变量值并连接您的 URI:
#if (_MSC_VER >= 1400)
#pragma warning(push)
#pragma warning(disable: 4996) // Disabling deprecation... bad...
#endif
#include <windows.h>
#include <stdlib.h>
#include <iostream>
#include <string>
int main()
{
std::string uri = std::string("file:///") + getenv("USERPROFILE") + "/Desktop/html_files/file.txt";
ShellExecute(NULL, "open",
"C:\progra~1\intern~1\iexplore.exe",
uri.c_str(),
"",
SW_MAXIMIZE);
return 0;
}
我在这里禁用警告,但你应该使用 _dupenv_s
而不是 getenv
。
祝你好运。
用户的 shell 文件夹路径,包括桌面,可由用户自定义,因此 %userprofile\desktop
不保证在所有系统上都是正确的路径。 正确获取用户实际桌面路径的方法是使用SHGetFolderPath(CSIDL_DESKTOPDIRECTORY)
or SHGetKnownFolderPath(FOLDERID_Desktop)
.
你不需要知道iexplorer.exe的路径,Windows知道如何找到它。因此,只需将 "iexplorer.exe" 本身指定为 lpFile
参数并将 HTML 文件名指定为 lpParameter
参数:
ShellExecute(NULL, "open", "iexplore.exe", "full path to\file.hml", NULL, SW_SHOWDEFAULT);
话虽如此,这是非常特定于 IE 的。如果要加载用户默认HTMLbrowser/viewer中的文件,设置lpVerb
参数为NULL,HTML文件作为lpFile
参数:
ShellExecute(NULL, NULL, "full path to\file.hml", NULL, NULL, SW_SHOWDEFAULT);
这与用户在 Windows 资源管理器中双击文件相同。
我正在开发一个 C++ 程序,它应该启动 Internet Explorer 并在 Windows 上显示本地 html 文件 7. 我正在尝试使用 ShellExecute,但它不起作用.我四处搜索,但找不到有效的答案。这是代码:
ShellExecute(NULL, "open", "start iexplore %userprofile%\Desktop\html_files\file.hml", NULL, NULL, SW_SHOWDEFAULT);
我将该命令复制到一个 system() 调用中,只是为了看看它是否会起作用,它确实起作用了。这是我试过的 system() 调用:
system("start iexplore %userprofile%\Desktop\html_files\file.html");
由于系统调用有效,这显然是 ShellExecute 的问题。基本上,Internet Explorer 不会出现。不过,一切都可以正确编译。有什么想法吗?
我认为 IE 不会识别 URI 中的环境变量。其实%
有特殊的意义。
像这样的东西应该可以工作:
#include <windows.h>
int main()
{
ShellExecute(NULL, "open",
"C:\progra~1\intern~1\iexplore.exe",
"file:///C:/Users/UserName/Desktop/html_files/file.html",
"",
SW_MAXIMIZE);
return 0;
}
另一种方法,获取 %userprofile% 环境变量值并连接您的 URI:
#if (_MSC_VER >= 1400)
#pragma warning(push)
#pragma warning(disable: 4996) // Disabling deprecation... bad...
#endif
#include <windows.h>
#include <stdlib.h>
#include <iostream>
#include <string>
int main()
{
std::string uri = std::string("file:///") + getenv("USERPROFILE") + "/Desktop/html_files/file.txt";
ShellExecute(NULL, "open",
"C:\progra~1\intern~1\iexplore.exe",
uri.c_str(),
"",
SW_MAXIMIZE);
return 0;
}
我在这里禁用警告,但你应该使用 _dupenv_s
而不是 getenv
。
祝你好运。
用户的 shell 文件夹路径,包括桌面,可由用户自定义,因此 %userprofile\desktop
不保证在所有系统上都是正确的路径。 正确获取用户实际桌面路径的方法是使用SHGetFolderPath(CSIDL_DESKTOPDIRECTORY)
or SHGetKnownFolderPath(FOLDERID_Desktop)
.
你不需要知道iexplorer.exe的路径,Windows知道如何找到它。因此,只需将 "iexplorer.exe" 本身指定为 lpFile
参数并将 HTML 文件名指定为 lpParameter
参数:
ShellExecute(NULL, "open", "iexplore.exe", "full path to\file.hml", NULL, SW_SHOWDEFAULT);
话虽如此,这是非常特定于 IE 的。如果要加载用户默认HTMLbrowser/viewer中的文件,设置lpVerb
参数为NULL,HTML文件作为lpFile
参数:
ShellExecute(NULL, NULL, "full path to\file.hml", NULL, NULL, SW_SHOWDEFAULT);
这与用户在 Windows 资源管理器中双击文件相同。