Live Update в X-стиле [RU].Ban0K! (www.int3.net) Хакер, номер #071, стр. 071-106-2 1). InternetGetConnectedState. Для начала мы должны узнать факт наличия и тип текущего соединения. На эти вопросы нам и ответит данная функция. function InternetGetConnectedState(lpdwFlags: LPDWORD; dwReserved: DWORD): BOOL; stdcall; Параметры: lpdwFlags - комбинация флагов, которые дают полную картину подключения. dwReserved - зарезервировано на будущее, must be zero. Особо ленивые могут проверять только значение, возвращаемое функцией, это либо TRUE - онлайн, либо FALSE - оффлайн. Пример вызова: Status := InternetGetConnectedState(dwFlags,0); 2). InternetOpen. Эта функция открывает сессию связи и возвращает дескриптор соединения. function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD; lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall; Параметры: lpszAgent - имя браузера, который будет юзать этот дескриптор, к примеру MSIE или Opera. Я использую собственное имя агента для корректной идентификации PHP-скриптом (см. выше). dwAccessType - тип требуемого доступа. Функция будет вызываться следующим образом: hSession:= InternetOpenA('AutoUpdate browser',INTERNET_OPEN_TYPE_PRECONFIG,0,0,0); В итоге функция, будем надеяться, вернет нам долгожданный дескриптор (далее hSession), и его надо будет сохранить в сухом и теплом месте. После окончания работы этот дескриптор должен быть закрыт функцией InternetCloseHandle, которую мы рассмотрим самой последней. 3). InternetOpenUrl. Данная функция отдаст нам дескриптор определенного Url. function InternetOpenUrl(hInet: HINTERNET; lpszUrl: PChar; lpszHeaders: PChar; dwHeadersLength: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall; Параметры: hInet - дескриптор интернет-сессии, открытый предыдущей функцией. lpszUrl - собственно Url, должен начинаться на http:// в нашем случае (поддерживается еще ftp://, https://, gopher://) lpszHeaders - набор заголовков, очень полезный параметр... который мы использовать не будем. dwHeadersLength - длина lpszHeaders. dwFlags и dwContext – очень обширные, судя по документации, параметры, но нам они сегодня не пригодятся. В нашем примере эта функция будет иметь вот такой вид: hUrl := InternetOpenUrlA(hSes,'http://localhost/?q=GetVersion',0,0,0,0); 4). InternetReadFile. Функция читает файл, на который указывает передаваемый ей дескриптор. function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer; dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall; Параметры: hFile – дескриптор некого Url, полученный нами с помощью предыдущей функции. lpBuffer - указатель на буфер, в который будет считан файл или часть файла. dwNumberOfBytesToRead - количество считываемых байт. lpdwNumberOfBytesRead - указатель на переменную, в которую будет помещено число считанных байт. |