我使用C++ Builder XE7創建項目,在該項目中用戶可以單擊按鈕以打開Web鏈接,例如打開支持頁面,或在社交媒體上分享他的體驗。爲此,我使用ShellExecute()
函數,除了一個按鈕,它運行良好。ShellExecute(和ShellExecuteEx)對我的網址不做任何操作
當我點擊這個按鈕時,根本沒有任何反應。 ShellExecute()
函數沒有錯誤地返回(返回值是42),但是我的默認瀏覽器沒有打開,並且根本沒有顯示網頁。
這是我ShellExecute()
實施
const HINSTANCE result = ::ShellExecute(handle, "open", url.c_str(), NULL, NULL, SW_SHOWDEFAULT);
我也試過ShellExecuteEx()
功能:
::SHELLEXECUTEINFO info;
std::memset(&info, 0, sizeof(info));
info.cbSize = sizeof(info);
info.hwnd = handle;
info.lpVerb = "open";
info.lpFile = url.c_str();
info.nShow = SW_SHOWDEFAULT;
if (!::ShellExecuteEx(&info))
的url
參數包含我試圖打開的網站鏈接。出於安全考慮,我無法將其作爲示例發佈,但是我在瀏覽器(FireFox)中對其進行了測試,效果良好。另一方面,如果我只用GOOGLE的網站替換url
的內容來執行我的代碼,那麼所有的代碼都可以按預期運行。
handle
只是父框架的Handle
參數。
我還試圖調整ShellExecute/Ex()
參數,如hwnd
和nShow
字段,但沒有變化。
有人可以指我什麼是錯的?
你能發佈[MCVE]另外你是什麼默認瀏覽器?如果你開始運行,然後輸入一些url,例如'http:// www.stackoverflow.com /',會發生什麼情況。 –
不幸的是,我無法發佈更多代碼。調用ShellExecute()之前的代碼僅僅是URL的構建,在函數內部,我不允許展示它。在調用者方面,這個函數只是在按鈕事件中調用,並且按鈕父項的句柄。所以上面的代碼已經是我允許提供的最簡單的代碼示例了。 –
我的Windows配置一切正常。正如我在上面的帖子中所說的,我的默認瀏覽器是FireFox,Start-Run會按照預期打開它提供的鏈接。而且,在我的代碼中,同樣的ShellExecute()可以很好地處理簡單的鏈接,例如http://www.google.com。但是,ShellExecute()的行爲本身對我的url非常奇怪:爲什麼它返回而沒有做任何事情,並且沒有錯誤?可能是ShellExecute()錯誤? –