2008-09-30 67 views
9

好吧,這可能有一個非常簡單的答案,但我從來沒有嘗試過這樣做:如何從應用程序內啓動網頁?你知道,「點擊這裏進入我們的常見問題解答」,當他們啓動他們的默認網頁瀏覽器並進入你的頁面。我在Windows中使用C/C++,但是如果有更廣泛,更便攜的方式來做到這一點,我也想知道這一點。從我的應用程序啓動網頁

回答

17
#include <windows.h> 

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

它沒有管理員權限的工作嗎? – foobar 2014-07-05 19:17:20

4

我相信你想使用ShellExecute()函數,它應該尊重用戶對默認瀏覽器的選擇。

3

您可以使用ShellExecute函數。 示例代碼:

ShellExecute(NULL, "open", "http://stackoverflow.com", "", ".", SW_SHOWDEFAULT); 
4

請仔細閱讀docs爲的ShellExecute。要真正地防止代碼,他們建議初始化COM。看到這裏的文檔,並尋找「COM應該如下所示進行初始化」的部分。簡短的回答是這樣做(如果您尚未init'd COM):

的CoInitializeEx(NULL,COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

+0

該死的COM再次襲擊.. – Everyone 2017-03-28 03:02:38

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"); 
+2

BROWSER env未在Ubuntu中設置。當getenv返回NULL時,該代碼崩潰:拋出'std :: logic_error'實例後終止調用what():basic_string :: _ S_construct null無效。 – 2014-08-01 11:10:45

1

出於某種原因,ShellExecute的不有時如果應用程序即將TERMIN工作吃完之後立即吃。我們已經在ShellExecute之後添加了Sleep(5000),這有所幫助。

相關問題