|
UrlDownloadToFile这个函数真是倒霉,入了永远不能翻身的杀软黑名单。。。
上次我要写一个需要下载文件的软件,为需要调用此函数感到深深的苦恼。
乔丹饿死同学竟然找到这么一份代码,自己实现了UrlDownloadToFile:
- // Downer.cpp : Defines the entry point for the application.
- // data :2010.06.09
- // author: leehu
- #include <windows.h>
- #include <wininet.h>
- #include <stdio.h>
- #pragma comment(lib,"winmm.lib")
- #pragma comment(lib,"Wininet.lib")
- void InternetDownFile(char szUrl[100],char szFileName[100])
- {
- DWORD dwFlags;
- if(!InternetGetConnectedState(&dwFlags,0))
- {
- return ;
- }
- char strAgent[64];
- sprintf(strAgent,"Agent%ld",timeGetTime());
- HINTERNET hOpen;
- if(!(dwFlags & INTERNET_CONNECTION_PROXY))
- {
- hOpen = InternetOpen(strAgent,INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,NULL,NULL,0);
- }
- else
- {
- hOpen = InternetOpenA("win",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
- }
- if(!hOpen)
- {
- return ;
- }
- DWORD dwSize;
- char szHead[] = "Accept: */*\r\n\r\n";
- void* szTemp[20012];
- HINTERNET hConnect;
- HANDLE hFile;
- if(!(hConnect = InternetOpenUrlA(hOpen,szUrl,szHead,strlen(szHead),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_RELOAD,0)))
- {
- return ;
- }
- hFile=CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
- if(hFile==INVALID_HANDLE_VALUE)
- {
- DWORD dwByteToRead = 0;
- DWORD dwByteToWrite;
- DWORD dwSizeOfRq = 4;
- DWORD dwBytes = 0;
-
- hFile=CreateFile(szFileName,FILE_SHARE_WRITE,FILE_SHARE_READ,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0);
- if(!HttpQueryInfo(hConnect,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,(LPVOID)&dwByteToRead,&dwSizeOfRq,NULL))
- {
- dwByteToRead = 0;
- }
-
- do
- {
- if(!InternetReadFile(hConnect,szTemp,20012,&dwSize))
- {
- InternetCloseHandle(hOpen);
- CloseHandle(hFile);
- return ;
- }
- if(dwSize == 0)
- break;
- else
- WriteFile(hFile,szTemp,dwSize,&dwByteToWrite,NULL);
-
- }while(true);
-
- CloseHandle(hFile);
- InternetCloseHandle(hOpen);
- }
- return ;
- }
- int WINAPI WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow)
- {
- InternetDownFile("url","path");
- return 0;
- }
复制代码 深深膜拜乔二的找代码能力,顺便深深鄙视那些乱报毒的AV。 |
|