Delphi для качков Лозовский Александр Xakep, номер #052, стр. 052-074-1 (klouniz@mail.ru) Любому человеку, мало-мальски знакомому с интернетом, известны такие программы-качалки, как GetRight, Reget и Flashget. Их расплодилось великое множество, все они занимают первые места в рейтингах и продаются за немалые деньги. FlashGet, например, постоянно требует от меня заплатить буржую $29.99 за дальнейшее использование его программы. Все это, конечно, понятно, хочется денег, да побольше... Но разве русский человек может заплатить такую сумму? :) Так что давай сегодня напишем свой Reget, и ты сможешь демонстрировать всем знакомым девушкам свою физиономию в about программы :). РЕКВИЗИТ Он нам понадобится. Прошли те времена, когда все делалось в два диалога и одну строчку кода. Нам придется писать программу с использованием функций библиотеки WinInet.dll и заголовочного файла, соответственно, WinInet.Pas. Сразу пропиши его в uses, а то потом забудешь и начнешь тыкаться, искать свою ошибку. Так вот, давай для начала попробуем разобраться с самыми необходимыми функциями, а с остальными ты разберешься сам на msdn.microsoft.com (полный линк давать не буду, т.к. он ОЧЕНЬ большой). Посмотри там следующие функции: InternetDial, InternetGoOnline или InternetCrackUrl (думаю, эта функция тебя должна заинтересовать :)). Но вернемся к реальности. У нас на повестке дня следующие функции: 1) function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD; lpszProxyName, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall; Она открывает интернет-сессию для приложения. Вот какие у нее аргументы: lpszAgent - имя программы. Серьезные люди пишут application.exename, а старики - ParamStr(0). На самом деле это не так важно, программа все равно будет работать. dwAccessType - способ соединения. Вот его типы: PRE_CONFIG_INTERNET_ACCESS - как в реестре. INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY - не юзать internet setup file. GATEWAY_INTERNET_ACCESS - через шлюз. CERN_PROXY_INTERNET_ACCESS - через прокси. lpszProxyName - имя прокси. lpszProxyBypass - кому не надо использовать проксю. dwFlags - режим работы. Если ставить INTERNET_FLAG_ASYNC, то будет асинхронный. В данном случае это только дополнительный напряг, поэтому ставь 0. 2) function InternetOpenUrl(hInet: HINTERNET; lpszUrl: PChar; lpszHeaders: PChar; dwHeadersLength: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall; Это функция открывает заданный УРЛ! :) Ее описание: hInet - переменная типа HINTERNET. Ее значение возвращает функция InternetOpen. lpszUrl - собственно сам УРЛ. lpszHeaders - дополнительные строки в НТТР запросе. Нам они не нужны. dwHeadersLength - их длина. dwFlags - их тут больше 10 значений. Вот самое нужное: INTERNET_FLAG_EXISTING_CONNECT - не создавать для объекта нового соединения. dwContext - пиши 0. 3) function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer; dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall; InternetReadFile читает удаленный файл. Если ты знаком со старой доброй ReadFile (или _lRead), то поймешь сам, а это для тех, кто не знает: hFile - сюда ты подставляешь значение из предыдущей функции (можно и FtpOpenFile, если тебе это ближе). |