我正在使用C ++ Builder XE7创build一个项目,在这个项目中,用户可以点击一个button来打开一个Web链接,例如打开一个支持页面,或者在社交媒体上分享他的体验。 为此,我使用了ShellExecute()函数,除了一个button外,它运行良好。
当我点击这个button时,没有任何反应。 ShellExecute()函数返回没有错误(返回值是42),但我的默认浏览器不打开,网页根本不显示。
这是我的ShellExecute()实现
const HINSTANCE result = ::ShellExecute(handle,"open",url.c_str(),NULL,SW_SHOWDEFAULT);
我也尝试了ShellExecuteEx()函数:
以编程方式将附加标题信息与URL一起传递以打开浏览器
如何根据客户端浏览器的语言重写Nginx中的位置?
如何让Windows 7上的Web浏览器考虑etc / hosts文件
从Web浏览器拍照
::SHELLEXECUTEINFO info; std::memset(&info,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)中testing了它,并且运行良好。 另一方面,如果我通过用Google网站replaceurl内容来执行我的代码,所有的工作都按预期进行。
handle只是父框架的Handle参数。
我也尝试调整ShellExecute/Ex()参数,如hwnd和nShow字段,但没有改变。
有人可以指我什么是错的?
Windowsbatch file:最后一个进程的PID?
使用Python远程控制(轻量级)浏览器
最后修改的caching过期控制
如何在Windows 10中将program.exe设置为默认浏览器?
Perl脚本在linuxterminal中运行,但在浏览器中出现错误
网址的格式如下:http:// www。 mysite.xxx/selectPage.PHP?arg1=xxx&arg2=yyy&…&argX=a包含“quotes”的文本和一些%26amp%3b特殊字符!
在这个例子中,你必须对双引号和空格进行URL编码,因为这些对URL的查询部分来说是无效字符。
通过用%22替换双引号并用%20替换空格来修复它。 我建议使用像UrlEscape()这样的函数来正确编码URL。
尽管大多数浏览器对用户输入都有容错,并且也会接受一个没有有效编码的URL,但最好严格遵循规范,因为不能保证容忍。
另外,当URL作为命令行参数传递给与URL协议相关的命令时,双引号会产生问题。 这是因为双引号是用于定义包含空格的命令行参数的保留字符 。
例如,在我的机器上, http协议与以下命令关联(请参阅HKEY_CLASSES_ROOThttpshellopencommand ):
"C:Program Files (x86)Mozilla Firefoxfirefox.exe" -osint -url "%1"
你可以看到,双引号已经被用来包含最后一个参数,如果你在URL中有双引号,这显然会搞砸了。
正确编码用于ShellExecuteEx()的URL的示例:
#include <windows.h> #include <Shellapi.h> int main() { ::CoInitialize(nullptr); SHELLEXECUTEINFOW info{ sizeof(info) }; info.fMask = SEE_MASK_NOASYNC; // because we exit process after ShellExecuteEx() info.lpVerb = L"open"; info.lpFile = L"http://www.google.de/search?q=ShellExecuteEx%20URL%20%22double%20quotes%22"; info.nShow = SW_SHOWDEFAULT; if( !::ShellExecuteExW( &info ) ) { DWORD err = ::GetLastError(); printf("ShellExecuteEx Failed with error %dn",err ); } ::CoUninitialize(); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。