CLinkCtrl点击后打开网页

ANT2AUNTH 2015-02-02 05:18:12
唔。我已经实现点击了,而且事件也响应了。

=。=求问,怎么能打开一个网页
	ShellExecute(NULL, LPCWSTR("open"), pnmLink->item.szUrl, NULL, NULL, SW_SHOWNORMAL);

我这样。。然后返回的值是0,查MSDN说是内存。。。。。。。
=。=如果我把那个URL,改成本地的,也是返回0。。。。。。

- -、我想要调用浏览器打开一个网页。

- -、顺便问下,在打个见网页的同时进行post传值可能么
...全文
405 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2015-03-14
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
疯狂-的-蜗牛 2015-02-03
  • 打赏
  • 举报
回复
换成 HINSTANCE hInst = ShellExecute(NULL, L"open", L"www.baidu.com", NULL, NULL, SW_SHOWNORMAL); 你把一个ascii字符串强制转换成unicode字符类型,API调用失败返回:SE_ERR_ASSOCINCOMPLETE 操作系统拒绝访问 你可以这样试一下: WCHAR* p = LPWSTR("open"); 结果p在内存里变成了汉字:灯湥 ShellExecute内部只存在对 edit Launches an editor and opens the document for editing. If lpFile is not a document file, the function will fail. explore Explores a folder specified by lpFile. find Initiates a search beginning in the directory specified by lpDirectory. open Opens the item specified by the lpFile parameter. The item can be a file or folder. print Prints the file specified by lpFile. If lpFile is not a document file, the function fails. NULL 这几种操作的处理(字符串比较),对于不存在的应该就是返回SE_ERR_ASSOCINCOMPLETE了。
beautyangus 2015-02-03
  • 打赏
  • 举报
回复
楼主你的参数用错了……查下 msdn 吧。 param2 动作 open、print、edit、find 等。 param3 程序 你指定的可执行文件的文件名。如 iexplorer.exe chrome.exe 等。 param4 参数 对应就是楼组的 url,www.baidu.com 等。 例如: ShellExecute(NULL, TEXT("open"), TEXT("chrome.exe"), TEXT("www.baidu.com"), NULLL, SW_SHOWNORMAL);
信阳毛尖 2015-02-03
  • 打赏
  • 举报
回复
引用 14 楼 mfcing 的回复:
[quote=引用 13 楼 lsq19871207 的回复:] [quote=引用 12 楼 mfcing 的回复:] [quote=引用 11 楼 lsq19871207 的回复:] [quote=引用 10 楼 mfcing 的回复:] [quote=引用 7 楼 lsq19871207 的回复:] 其中的iexplore.exe、chrome.exe、360chrome.exe等浏览器直接这么写就可以,当然,使用全路径也行,因为装了浏览器之后,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths路径下就有了,所以不必写全路径
不用指定浏览器,直接给个NULL,系统就会调用默认浏览器来打开。[/quote] you sure? have you tryed?[/quote] 我一直都是这么在我的项目里用的,就没有出过问题。[/quote] 或许吧,但我的机器不可以,release版另外一台机器也不行,求指点一二[/quote] 指定浏览器的时候,第三个参数用浏览器名,第四个参数是URL; 在不指定浏览器时,第三个参数是URL,第四个参数是NULL,这时会调用系统默认浏览器打开。 例如: ::ShellExecute(NULL, L"open", L"IEXPLORE", CZ_URL, NULL, SW_SHOWNORMAL);使用IE新窗口打开一个链接 ::ShellExecute(NULL, L"open", L"www.baidu.com", NULL, NULL, SW_SHOWNORMAL);使用默认浏览器打开一个链接 指点不敢当,我是这么用的。[/quote] 刚仔细查了下msdn,侬说的对! 这属于ShellExecute特殊的用法,就是FileName参数设置为“http:”、“https:”协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址,这时候ShellExecute的第四个参数设置为NULL即可! PS:实际上FileName参数设置为www打头的即可
疯狂-的-蜗牛 2015-02-03
  • 打赏
  • 举报
回复
引用 13 楼 lsq19871207 的回复:
[quote=引用 12 楼 mfcing 的回复:] [quote=引用 11 楼 lsq19871207 的回复:] [quote=引用 10 楼 mfcing 的回复:] [quote=引用 7 楼 lsq19871207 的回复:] 其中的iexplore.exe、chrome.exe、360chrome.exe等浏览器直接这么写就可以,当然,使用全路径也行,因为装了浏览器之后,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths路径下就有了,所以不必写全路径
不用指定浏览器,直接给个NULL,系统就会调用默认浏览器来打开。[/quote] you sure? have you tryed?[/quote] 我一直都是这么在我的项目里用的,就没有出过问题。[/quote] 或许吧,但我的机器不可以,release版另外一台机器也不行,求指点一二[/quote] 指定浏览器的时候,第三个参数用浏览器名,第四个参数是URL; 在不指定浏览器时,第三个参数是URL,第四个参数是NULL,这时会调用系统默认浏览器打开。 例如: ::ShellExecute(NULL, L"open", L"IEXPLORE", CZ_URL, NULL, SW_SHOWNORMAL);使用IE新窗口打开一个链接 ::ShellExecute(NULL, L"open", L"www.baidu.com", NULL, NULL, SW_SHOWNORMAL);使用默认浏览器打开一个链接 指点不敢当,我是这么用的。
信阳毛尖 2015-02-03
  • 打赏
  • 举报
回复
引用 12 楼 mfcing 的回复:
[quote=引用 11 楼 lsq19871207 的回复:] [quote=引用 10 楼 mfcing 的回复:] [quote=引用 7 楼 lsq19871207 的回复:] 其中的iexplore.exe、chrome.exe、360chrome.exe等浏览器直接这么写就可以,当然,使用全路径也行,因为装了浏览器之后,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths路径下就有了,所以不必写全路径
不用指定浏览器,直接给个NULL,系统就会调用默认浏览器来打开。[/quote] you sure? have you tryed?[/quote] 我一直都是这么在我的项目里用的,就没有出过问题。[/quote] 或许吧,但我的机器不可以,release版另外一台机器也不行,求指点一二
疯狂-的-蜗牛 2015-02-03
  • 打赏
  • 举报
回复
引用 11 楼 lsq19871207 的回复:
[quote=引用 10 楼 mfcing 的回复:] [quote=引用 7 楼 lsq19871207 的回复:] 其中的iexplore.exe、chrome.exe、360chrome.exe等浏览器直接这么写就可以,当然,使用全路径也行,因为装了浏览器之后,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths路径下就有了,所以不必写全路径
不用指定浏览器,直接给个NULL,系统就会调用默认浏览器来打开。[/quote] you sure? have you tryed?[/quote] 我一直都是这么在我的项目里用的,就没有出过问题。
信阳毛尖 2015-02-03
  • 打赏
  • 举报
回复
引用 10 楼 mfcing 的回复:
[quote=引用 7 楼 lsq19871207 的回复:] 其中的iexplore.exe、chrome.exe、360chrome.exe等浏览器直接这么写就可以,当然,使用全路径也行,因为装了浏览器之后,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths路径下就有了,所以不必写全路径
不用指定浏览器,直接给个NULL,系统就会调用默认浏览器来打开。[/quote] you sure? have you tryed?
疯狂-的-蜗牛 2015-02-03
  • 打赏
  • 举报
回复
引用 7 楼 lsq19871207 的回复:
其中的iexplore.exe、chrome.exe、360chrome.exe等浏览器直接这么写就可以,当然,使用全路径也行,因为装了浏览器之后,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths路径下就有了,所以不必写全路径
不用指定浏览器,直接给个NULL,系统就会调用默认浏览器来打开。
信阳毛尖 2015-02-03
  • 打赏
  • 举报
回复
引用 8 楼 fry693175708 的回复:
[quote=引用 6 楼 lsq19871207 的回复:] 汗!你的ShellExecute用的对吗?都没有指定浏览器...

	HINSTANCE hInstance = ShellExecute(NULL,_T("open"),_T("iexplore.exe"),pnmLink->item.szUrl,lpszPath,SW_SHOWNORMAL);
	if(int(hInstance) < 32)
	{
		::MessageBox(NULL,_T("浏览器启动失败,请稍后再试!"),_T("系统异常"),MB_ICONWARNING|MB_OK);
		return;
	}
呃。如果要系统默认的浏览器呢?还要获取一遍么?[/quote] 是的,你自己去读注册表:HKEY_CLASSES_ROOT\htmlfile\shell\open\command\
ANT2AUNTH 2015-02-03
  • 打赏
  • 举报
回复
引用 6 楼 lsq19871207 的回复:
汗!你的ShellExecute用的对吗?都没有指定浏览器...

	HINSTANCE hInstance = ShellExecute(NULL,_T("open"),_T("iexplore.exe"),pnmLink->item.szUrl,lpszPath,SW_SHOWNORMAL);
	if(int(hInstance) < 32)
	{
		::MessageBox(NULL,_T("浏览器启动失败,请稍后再试!"),_T("系统异常"),MB_ICONWARNING|MB_OK);
		return;
	}
呃。如果要系统默认的浏览器呢?还要获取一遍么?
信阳毛尖 2015-02-03
  • 打赏
  • 举报
回复
其中的iexplore.exe、chrome.exe、360chrome.exe等浏览器直接这么写就可以,当然,使用全路径也行,因为装了浏览器之后,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths路径下就有了,所以不必写全路径
信阳毛尖 2015-02-03
  • 打赏
  • 举报
回复
汗!你的ShellExecute用的对吗?都没有指定浏览器...

	HINSTANCE hInstance = ShellExecute(NULL,_T("open"),_T("iexplore.exe"),pnmLink->item.szUrl,lpszPath,SW_SHOWNORMAL);
	if(int(hInstance) < 32)
	{
		::MessageBox(NULL,_T("浏览器启动失败,请稍后再试!"),_T("系统异常"),MB_ICONWARNING|MB_OK);
		return;
	}
encoderlee 2015-02-02
  • 打赏
  • 举报
回复

	ShellExecute(NULL, L"open", pnmLink->item.szUrl, NULL, NULL, SW_SHOWNORMAL);
这样试试看看
ANT2AUNTH 2015-02-02
  • 打赏
  • 举报
回复
引用 1 楼 mfcing 的回复:
[quote=引用 楼主 fry693175708 的回复:] 唔。我已经实现点击了,而且事件也响应了。 =。=求问,怎么能打开一个网页
	ShellExecute(NULL, LPCWSTR("open"), pnmLink->item.szUrl, NULL, NULL, SW_SHOWNORMAL);
我这样。。然后返回的值是0,查MSDN说是内存。。。。。。。 =。=如果我把那个URL,改成本地的,也是返回0。。。。。。 - -、我想要调用浏览器打开一个网页。 - -、顺便问下,在打个见网页的同时进行post传值可能么
代码是没有问题的,调试的时候那个URL正常吗,什么类型? 至于打开的同时POST是做不到的,打开过程是一个GET[/quote] URL没有问题。。不用这个参数,换成手写的,或是一个本地文件,也打不开。。一样的返回。。 - -、不会和我的系统有关吧。。是win10来的。。
疯狂-的-蜗牛 2015-02-02
  • 打赏
  • 举报
回复
引用 楼主 fry693175708 的回复:
唔。我已经实现点击了,而且事件也响应了。 =。=求问,怎么能打开一个网页
	ShellExecute(NULL, LPCWSTR("open"), pnmLink->item.szUrl, NULL, NULL, SW_SHOWNORMAL);
我这样。。然后返回的值是0,查MSDN说是内存。。。。。。。 =。=如果我把那个URL,改成本地的,也是返回0。。。。。。 - -、我想要调用浏览器打开一个网页。 - -、顺便问下,在打个见网页的同时进行post传值可能么
代码是没有问题的,调试的时候那个URL正常吗,什么类型? 至于打开的同时POST是做不到的,打开过程是一个GET

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧