检测网页是否可以打开, 再使用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 ...
随机推荐
- android 组合控件接收不到点击事件的问题
android点击事件的传播是有子控件传给父控件,如果子控件处理过了,父控件不再处理,所以要想让组合控件接收点击事件,必须屏蔽子控件的点击事件. 设置组合控件的clickable和focusable属 ...
- 05文件与IO
这节主要学习了read.write.lseek.目录访问(opendir.readdir.closedir)这几个系统调用及其简单的应用. 一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O ...
- jQuery 工具类库集锦
备注:待验证. ...................................以下待验证................................ 今天度娘发现这个内容,原来我一直做的都 ...
- c# win form 显示支付宝二维码图片
System.Net.WebClient web = new System.Net.WebClient(); byte[] buffer = web.DownloadData(网络图片的地址); we ...
- SPOJ #5 The Next Palindrome
"not more than 1000000 digits" means an efficient in-place solution is needed. My first so ...
- 百度地图和js操作iframe
document.getElementById("ifarme-63").contentWindow.document.getElementById("qksv" ...
- 51nod 1348 乘积之和
用(r-l+2)维向量f[l,r]表示区间[l,r]内选i个数(0<=i<=r-l+1)相乘的所有方案之和,可以发现f[l,r]=f[l,m]*f[m+1,r],题目模数100003较小, ...
- php返回状态200或者300的写法
header("HTTP/1.0 200 OK"); phpinfo(); header("HTTP/1.0 300 OK"); phpinfo();
- 黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键
1.新建一个类 HotkeyHelper using System; using System.Runtime.InteropServices; using System.Windows.Forms ...
- Apple dev travel
Objective-C最基础语法之Class定义: http://mobile.51cto.com/iphone-281925.htm Table View: http://www.appcoda. ...