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