簡體   English   中英

C++,Shell 執行帶有井號 (#) 的 URL

[英]C++, ShellExecute a URL with the hash sign (#)

我使用 ShellExecute 從我的程序中打開鏈接。 它工作正常,但不適用於所有鏈接。 當鏈接帶有井號 (#) 時,鏈接仍會打開,但不是完整的(它在 # 之前被切斷)。 我正在使用的代碼是:

ShellExecuteW(NULL, L"open", L"http://blablabla.com/something#something", NULL, NULL, SW_SHOWNORMAL);

我也試過:

ShellExecute(NULL, "open", "rundll32.exe", "url.dll,FileProtocolHandler http://blablabla.com/something#something",NULL,SW_SHOWNORMAL);

結果相同。

有人知道為什么會這樣嗎?

在我閱讀了一個類似的問題后,我解決了這個問題: ShellExecute failed for local html or file URLs

然后使用: http : //www.codeproject.com/Tips/607833/Where-is-the-Default-Browser-Command-Line-in-Regis我確定了默認的 Internet 瀏覽器位置,並做了一個函數:

std::size_t hhhel2 = linknewone.find("#");
    if (hhhel2 != std::string::npos) {
        LPTSTR pszBrowserPath;
        if (GetDefaultBrowserLaunchPath(&pszBrowserPath))
        {
            string browserpathWithLink = pszBrowserPath;
            if (browserpathWithLink.length() > 1) {
                string browserpathWithLinkTemp = browserpathWithLink.substr(0, 1);
                    std::size_t dfdX = browserpathWithLinkTemp.find("\"");
                    if (dfdX != std::string::npos) {
                        browserpathWithLink = browserpathWithLink.substr(1);
                    }
                std::size_t dfd = browserpathWithLink.find("\"");
                if (dfd != std::string::npos) {
                    browserpathWithLink = browserpathWithLink.substr(0, dfd);

                }
            }
            delete[] pszBrowserPath;
            ShellExecute(NULL, _T("open"), browserpathWithLink.c_str(), linknewone.c_str(), NULL, SW_SHOWNORMAL);
        }
    }

我想我在 QT Applicaiton 中用更簡單的方法解決了這個問題。 當我沒有將“file:///”添加到字符串時,它會在 url 中的尖字符后截斷。

QString currentpath = QDir::currentPath();
QString url = "/help//html/index.html#current";
QString full_url = "file:///" + currentpath + url;
QByteArray full_url_arr= full_url.toLocal8Bit();
LPCSTR lp = LPCSTR(full_url_arr.constData());
ShellExecute(NULL, "open", lp, NULL, NULL, SW_SHOWNORMAL);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM