检测网页是否可以打开, 再使用IE打开网页
//检测是否能连接网页
BOOL CanLinkWebPage(string strUrl)
{
/*clock_t start, finish;
double duration;
start = clock();
char buf[100];*/
//使用mfc的CHttpFile来检测
BOOL CanLink = FALSE;
CInternetSession session("HttpClient");
session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000); // 5000毫秒的连接超时
session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 5000); // 5000毫秒的发送超时
session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 5000); // 5000毫秒的接收超时
session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 5000); // 5000毫秒的发送超时
session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 5000); // 5000毫秒的接收超时
session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); // 1次重试
try
{
CHttpFile* pFile = (CHttpFile*)session.OpenURL(strUrl.c_str(), 1, INTERNET_FLAG_RELOAD | INTERNET_FLAG_TRANSFER_BINARY);
DWORD dwStatusCode;
pFile-> QueryInfoStatusCode(dwStatusCode);
/*sprintf_s(buf, "%s返回状态码是:%lu", strUrl.c_str(), dwStatusCode);
UpdateDebugLogToFile(buf);*/
//200 302 206状态码都可以
if(dwStatusCode == HTTP_STATUS_OK || dwStatusCode == HTTP_STATUS_REDIRECT || dwStatusCode == HTTP_STATUS_PARTIAL_CONTENT)
CanLink = TRUE;
pFile -> Close();
delete pFile;
}
catch (CException* e)
{
e->Delete();
}
session.Close();
/*finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
sprintf_s(buf, "%s%s%f%s, CanLink值:%d", strUrl.c_str()," 连接时间: ", duration, "秒", CanLink);
UpdateDebugLogToFile(buf);*/
return CanLink;
}
//测试几个URL的速度
unsigned __stdcall TestUrlSpeed(void* _pParam)
{
string _Url;
string* _pStr = (string*)_pParam;
if (_pStr) {
_Url = *_pStr;
if(_pStr != NULL)
{
delete _pStr;
_pStr = NULL;
}
}
if(CanLinkWebPage(_Url))
return 1;
else
return 0;
}
// 打开网页
unsigned __stdcall OpenUrlUseIEThread(void* _pParam)
{
string _Url;
string* _pStr = (string*)_pParam;
if (_pStr) {
_Url = *_pStr;
SAFE_DELETE(_pStr);
}
if (!_Url.empty()) {
vector<string> _UrlList;
CVarTypeCvt::split_by(_Url,_UrlList,';');
vector<string> urls;
for (INT _Idx = 0; _Idx < (INT)_UrlList.size(); _Idx++) {
_Url = _UrlList[_Idx];
CVarTypeCvt::trim(_Url," \t\r\n");
/*if (!_Url.empty() && CanOpenWebPage(_Url)) {
::ShellExecute(NULL, "open",_Url.c_str(), NULL, NULL, SW_SHOWNORMAL);
break;
}*/
if (!_Url.empty()) {
urls.push_back(_Url);
}
}
HANDLE* pHandles = new HANDLE[urls.size()];
for(int i = 0; i < urls.size(); ++i)
{
unsigned _ThreadID;
HANDLE _hThread = (HANDLE)_beginthreadex(NULL,NULL,TestUrlSpeed,(void*)new string(urls[i]),NULL,&_ThreadID); pHandles[i] = _hThread;
}
DWORD dw = WaitForMultipleObjects(urls.size(), pHandles, FALSE, 10000);
if(dw != WAIT_FAILED && dw != WAIT_TIMEOUT)
{
DWORD dwRet;
GetExitCodeThread(pHandles[dw - WAIT_OBJECT_0], &dwRet);
if(dwRet)
{
::ShellExecute(NULL, "open",urls[dw - WAIT_OBJECT_0].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
}
for(int i = 0; i < urls.size(); ++i)
{
if(pHandles[i] != NULL)
{
CloseHandle(pHandles[i]);
pHandles[i] = NULL;
}
}
delete [] pHandles;
pHandles = NULL;
}
return 0;
}
void OpenUrlUseIE(string _Url, BOOL _Async = TRUE)
{
if (_Url.empty()) return;
if (_Async) {
unsigned _ThreadID;
HANDLE _hThread = (HANDLE)_beginthreadex(NULL,NULL,OpenUrlUseIEThread,(void*)new string(_Url),NULL,&_ThreadID);
CloseHandle(_hThread);
_hThread = NULL;
}
else {
::ShellExecute(NULL, "open",_Url.c_str(), NULL, NULL, SW_SHOWNORMAL);
}
}
检测网页是否可以打开, 再使用IE打开网页的更多相关文章
- 原创:C语言打开、下载、删除网页,统计网页字符个数
本程序由本人在华夏联盟的ID闪电笨笨原创,首发地址:http://bbs.hx95.com/ 写此程序希望可以可以激发新手学习C语言的积极性! C语言代码实现功能如下: 1.实现 ...
- Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开
Android 在安装完成界面,点击打开应用程序.在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开. etong_123的专栏 - 博客频道 - CSDN.NET htt ...
- IE能够打开网页 可是chrome和火狐打不开网页解决的方法
一次偶然.电脑的浏览器打不开经常使用的网页,奇怪的是IE能够打开 之外的其它浏览器都不能够,结果百度一下.找到一个帖子,亲自測试一下,果真能够解决.记录例如以下: (1)開始-执行-输入CMD-确定- ...
- 使用selenium webdriver+beautifulsoup+跳转frame,实现模拟点击网页下一页按钮,抓取网页数据
记录一次快速实现的python爬虫,想要抓取中财网数据引擎的新三板板块下面所有股票的公司档案,网址为http://data.cfi.cn/data_ndkA0A1934A1935A1986A1995. ...
- 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】
试用Xcode 5 DP打开现有工程文件后再用Xcode4打开后 Xcode 4 会进入崩溃模式折腾了几次发现下面的方法可以让工程文件恢复 如果在Xcode5-DP中打开过xib文件需要在侧栏中修改I ...
- 安装vs2017后造成无法打开xproj项目无法打开
安装vs2017后,再用vs2015打开xproj项目的时候会报错: Error MSB4019 The imported project "C:\Program Files\dotnet\ ...
- 快速完成网页设计,10个顶尖响应式HTML5网页模板助你一臂之力
为了寻找一个优质的网页模板,网页设计师和开发者往往可能会花上大半天的时间.不过幸运的是,现在的网页设计师和开发人员已经开始共享HTML5,Bootstrap和CSS3中的免费网页模板资源.鉴于网站模板 ...
- 【已解决】每次打开Excel时会同时打开一个空的Excel表格
每次打开Excel时会同时打开一个空的Excel表格,情况如图. 官方解法如下,本人验证有效: 方法1, 请到以后路径中检查是否存在与空白文件夹同名字的Excel文件,删除它. C:\Users\\A ...
- Windows组件:打开MSDTC,恢复Windows TaskBar,查看windows日志,打开Remote Desktop,打开Services,资源监控
一,Win10 打开 MSDTC 1,Win+R 打开运行窗口,输入 dcomcnfg,打开组件服务窗口 2,在组件服务 catalog下找到 Distributed Transaction Coor ...
随机推荐
- 【转】ODBC、OLE DB、 ADO的区别
一.ODBC ODBC的由来 1992年Microsoft和Sybase.Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库.随后ODBC便获得了许多数据库厂商和 ...
- Angular学习(8)- 路由
示例: <!DOCTYPE html> <html ng-app="MyApp"> <head> <title>Study 12&l ...
- MyBatis绑定错误[Invalid bound statement (not found)]
如果出现: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 一般的原因是Mapper i ...
- phpize的安装
一直想装VLD却一直没装上,因为需要用到phpize,但这个工具大部分机子都没有装,上网搜了一下大部分都是讲phpize的应用没有讲怎么安装. 今天终于搜到了,不过是要在linux机器上,有yum命令 ...
- html中select标签获取选中value和text
$("#id").find("option:selected").text(); //获取Select选择的Text$("#id").val ...
- 在Visual Studio 2010/2012中 找不到创建WebService的项目模板
参考文章: http://blog.sina.com.cn/s/blog_6d545999010152wb.html 在 Visual Studio 2010 或者2012的新建 Web 应用程序或者 ...
- 用radio控制<tr>的隐藏和显示问题
jsp页面代码 <tr> <th nowrap="nowrap" width="10%" height="50px" st ...
- OAF_OAF Debug And Log调试和记录工具的详解(案例)
2014-06-16 Created By BaoXinjian
- C# 中的事件含义介绍
AutoSizeChanged 当 AutoSize 属性的值更改时发生.(从 ButtonBase 继承.) BackColorChanged 当 BackColor 属性的值更改时发生.(从 ...
- EasyUI-draggable
draggable用来在界面上创建一个可以拖动的元素,既然是可以拖动的元素,那么它在拖动过程中会有下面的几个事件:onBeforeDrag.onStartDrag.onDrag.onStopDrag. ...