Tesla.Angela 发表于 2011-4-23 00:52:33

[转载]UrlDownloadToFile的模拟实现

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,char szFileName)
{
DWORD dwFlags;
if(!InternetGetConnectedState(&dwFlags,0))
{
   return ;
}
char strAgent;
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;
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。

ok100fen 发表于 2011-4-23 09:52:47

但是乔丹提供的很多代码就不能下载了

请乔丹重新上传

3q

ywledoc 发表于 2011-4-23 10:07:33

饿死同学~很强大~很想知道这些代码哪找的~很诡异相当诡异~

马大哈 发表于 2011-4-23 17:35:13

回复 ok100fen 的帖子

不知道是不是他上传时的错误,还是论坛的问题??

Tesla.Angela 发表于 2011-4-23 19:28:31

回复 ywledoc 的帖子

据乔丹二死他自己说,他在很多论坛有帐号,而且即使是低权限的帐号,也能看到高权限的板块!不知道是不是真的!
页: [1]
查看完整版本: [转载]UrlDownloadToFile的模拟实现