{{notification.text}}

MirGames

LEX
31.08.06 18:01
0
Всем привет. Подскажите пожалуйста как средствами WINAPI скачать файл из интернета. Пробывал по
статьям (с помощью модуля wininet ), но ничего не вышло :( . Может кто-то делал подобное поделитесь рабочим кодом.
#1
Почётный лектор
31.08.06 19:30
0
ShellExecute(0, "open", "http://www.microsoft.com/files/winxp_source.zip", 0, true);

Ну, это в простейшем случае. Иначе не знаю :)
Отредактировано: 31.08.06 19:33
#2
LEX
31.08.06 20:13
0
Эта функция не подходит. Может у меня ни чего не выходит при использывании модуля wininet потому что у меня интернет с калбеком? Может в этом модуле есть функции для работы с калбеком?
#3
Limited Edition
31.08.06 20:32
0
Код
uses WinInet;

type TThreadStatus = (ACTIVE, INACTIVE, SUCCESS);


{------------------------------------------------------------------}
{  Function to get a file from the internet using HTTP          }
{------------------------------------------------------------------}
function GetInetFile(const fileURL, FileName: String): Boolean;
const BufferSize = 1024;
var hSession, hURL: HInternet;
    Buffer: array[1..BufferSize] of Byte;
    BufferLen: DWORD;
    f: File;
    sAppName: string;
    lpFindFileData: TWin32FindData;
begin
  Result:=False;
  sAppName := 'Jans OpenGL Texture loader';
  hSession := InternetOpen(
                 PChar(sAppName),                // agent. (can be "Microsoft Internet Explorer")
                 INTERNET_OPEN_TYPE_PRECONFIG,   // access
                 nil,                            // proxy server
                 nil,                            // defauts
                 0);                             // synchronous

  try
    hURL := InternetOpenURL(
               hSession,          // Handle to current session
               PChar(fileURL),    // URL to read
               nil,               // HTTP headers to send to server
               0,                 // Header length
               0, 0);             // flags   (might want to add some like INTERNET_FLAG_RELOAD with forces a reload from server and not from cache)
    if hURL <> nil then
    begin
      try
        AssignFile(F, FileName);
        Rewrite(F,1);
        repeat
          InternetReadFile(
             hURL,                  // File URL
             @Buffer,               // Buffer that receives data
             SizeOf(Buffer),        // bytes to read
             BufferLen);            // bytes read
          BlockWrite(F, Buffer, BufferLen)
        until BufferLen = 0;
        CloseFile(F);
        if Buffer[1] = $3D then     // basic check to see if its HTML returned
          Result:=FALSE             // if its the start of a tag, then error.
        else
          Result:=True;
      finally
        InternetCloseHandle(hURL)   // close connection to file
      end
    end;
  finally
    InternetCloseHandle(hSession) // close connection to internet
  end
end;


{------------------------------------------------------------------}
{  Download Thread                                                 }
{------------------------------------------------------------------}
function CreateRecID(P : Pointer) : LongInt; stdcall;
begin
  ThreadStatus :=ACTIVE;
  if GetInetFile(FileURL,LocalFileName) = True then
    ThreadStatus :=SUCCESS
  else
  begin
    MessageBox(0, 'Unable to locate file', 'Error', MB_OK or MB_ICONERROR);
    ThreadStatus :=INACTIVE;
  end;
end;


{------------------------------------------------------------------}
{  Creates a thread that downloads a texture from the internet     }
{------------------------------------------------------------------}
procedure GetFileFromInternet(URL, LocalFName : String);
var DownloadThread : THandle;
    ThreadID : DWord;
begin
  ThreadStatus :=ACTIVE;
  FileURL :=URL;
  LocalFileName := LocalFName;
  DownloadThread := CreateThread(nil, 0, @CreateRecID, nil, 0, ThreadID);
  if (DownloadThread = 0) then
    MessageBox(0, 'Unable to create a download thread', 'Error', MB_OK or MB_ICONERROR);
end;


З.ы. Ян Хорн рулит
Отредактировано: 31.08.06 20:33
#4
LEX
31.08.06 21:00
0
RzCoDer, большое тебе спасибо(и автору статьи тоже :) ). Хоть у одного автора руки прямые, а то перерыл статей с 20 и нигде код не пашит а тут вставил и всё работает и читабельность хорошая. :)
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}