用InternetGetConnectedState()检测本地网络状态
2 hOpen=InternetOpenA()打开与internet的连接
3 调用hConnect=InternetOpenUrlA()此调用可以打开一个使用URL的Internet文件句柄
4 打开本地文件
5 调用HttpQueryInfo()获的internet文件的大小
6 调用InternetReadFile()下载数据块
7 写入文件
8 关闭文件
9 InternetCloseHandle(hOpen);关闭internet的连接
#include <Wininet.h>
#include <mmsystem.h>
int CInternetDownLoadxDlg::Internertdownload(void* pData )
{
DWORD dwFlags;
InternetGetConnectedState(&dwFlags,0);Retrieves the connected state of the local system
char strAgent[64];
sprintf(strAgent,"Agent%ld",timeGetTime());
HINTERNET hOpen;
if(!(dwFlags & INTERNET_CONNECTION_PROXY))
{
//打开与Internet的连接
hOpen=InternetOpenA(strAgent,//应用的名称
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,//访问的类型参数
NULL,
NULL,
0);
}
else
{
hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
}
if(!hOpen)
{
AfxMessageBox("Internet连接错误!");
return -1;
}
DWORD dwSize;//这个变量被用于存储每次调用InternetReadFile读取了多少数据
char szHead[]="Accept: */*/r/n/r/n";//用于存储多个HTTP头信息。如果在调用InternetOpenUrl时不传递着个头信息,则只允许你打开文本文件
void* szTemp[16384];//缓冲变量,可以存储来自Internet的16KB的文件数据
HINTERNET hConnect;//这是一个HINTERNET句柄,包含请求结果(来自InternetOpenUrl)
CFile file;
if(!(hConnect=InternetOpenUrlA(hOpen,m_Url,szHead,
lstrlenA(szHead),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_PRAGMA_NOCACHE|
INTERNET_FLAG_RELOAD,0)))//此调用可以打开一个使用URL的Internet文件句柄。标志表示这个文件总是被读取,而不是缓存(cache
{
AfxMessageBox("不能打开该URL!");
return -1;
}
if(file.Open(m_Dirfile,CFile::modeWrite|CFile::modeCreate)==FALSE)
{
AfxMessageBox("不能打开本地的文件!");
return -1;
}
DWORD dwByteToRead=0;//存储文件的大小
DWORD dwSizeOfRq=4;//HttpQueryInfo内容的大小
DWORD dwBytes=0;//总共读取的字节数
if(!HttpQueryInfo(hConnect,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,
(LPVOID)&dwByteToRead,&dwSizeOfRq,NULL))//此调用可以获得文件的大小。如果失败则dwByteToRead被置为0,并且当文件被下载时不会显示百分比和总数
{
dwByteToRead=0;
}
do
{
//每次下载一个16KB的数据块
if(!InternetReadFile(hConnect,szTemp,16384,&dwSize))
{
AfxMessageBox("读文件出错!");
file.Close();
return -1;
}
if(dwSize==0)
break;
else
file.Write(szTemp,dwSize);
dwBytes+=dwSize;
}while(TRUE);
file.Close();
InternetCloseHandle(hOpen);
return 0;
}