从我的应用程序中启动网页

10

好的,这可能有一个非常简单的答案,但我以前从未尝试过:如何从应用程序中启动网页?您知道,“点击此处转到我们的常见问题解答”,当他们这样做时,它会启动他们的默认网络浏览器并转到您的页面。我正在Windows的C/C++中工作,但如果有更广泛、更可移植的方法,我也想知道。

6个回答

19
#include <windows.h>

void main()
{
   ShellExecute(NULL, "open", "http://yourwebpage.com",
            NULL, NULL, SW_SHOWNORMAL);
}

4

顺便说一句(因为您要求跨平台选项),以下方法在Linux中效果良好:

#include <unistd.h>
#include <stdlib.h>

void launch(const std::string &url)
{
  std::string browser = getenv("BROWSER");
  if(browser == "") return;

  char *args[3];
  args[0] = (char*)browser.c_str();
  args[1] = (char*)url.c_str();
  args[2] = 0;

  pid_t pid = fork();
  if(!pid)
    execvp(browser.c_str(), args);
}

用法:

launch("http://example.com");

3
在Ubuntu中未设置BROWSER环境变量。当getenv返回NULL时,代码会崩溃:terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid - Czarek Tomczak

4
我相信你想使用ShellExecute()函数,它应该尊重用户选择的默认浏览器。

4
请仔细阅读ShellExecute的文档。为了确保您的代码更加健壮,他们建议初始化COM。请查看这里的文档,并查找标有“应如此初始化COM”的部分。简短的答案是这样做(如果您尚未初始化COM):
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

3
您可以使用ShellExecute函数。 示例代码:
ShellExecute( NULL, "open", "http://stackoverflow.com", "", ".", SW_SHOWDEFAULT );

1
由于某些原因,如果应用程序在调用ShellExecute后立即终止,则有时会无法正常工作。我们在ShellExecute后添加了Sleep(5000),这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接