C ++,ShellExecute带有井号(#)的URL

时间:2015-09-13 19:59:31

标签: c++ hash shellexecute

我使用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);

具有相同的结果。

有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

在我阅读了类似的问题之后,我解决了这个问题:ShellExecute fails 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);
        }
    }

答案 1 :(得分:0)

我想我用QT应用程序中的一种更简单的方法解决了这个问题。当我没有在字符串中添加“ file:///”时,它会在网址中的尖字符后截断。

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);