用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;
}