#include "WinHttp.au3"
global $proxyUse = False
global $sProxyServer = "IP:Port" ; указывается прокси формата ip:port
Global $sDir = @ScriptDir & "\obelixpro-cyr.exe"
global $Domen = "ska4ay.pro"
If $proxyUse Then
$hOpen = _WinHttpOpen('au3browser', $WINHTTP_ACCESS_TYPE_NAMED_PROXY, $sProxyServer) ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent
Else
$hOpen = _WinHttpOpen('au3browser') ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent
EndIf
If @error Then
MsgBox(16, 'Ошибка', 'Не удалось инициализировать использование WinHttp-функций.')
Exit 1
EndIf
$hConnect = _WinHttpConnect($hOpen, $Domen) ;создаём соеденение, указываем только домен/ip-адрес
If @error Then
MsgBox(16, 'Ошибка', 'Не удалось создать соеденение.')
_WinHttpCloseHandle($hOpen)
Exit 2
EndIf
$sData = _WinHttpSimpleRequest($hConnect, 'GET', '/-KbS', default, default, default, True) ;отправляем запрос, указываем его метод, адрес страницы без домена и параметры
If @error Then
MsgBox(16, 'Ошибка', 'Не удалось отправить сообщение.')
Exit 3
EndIf
Global $hHttpRequest = _WinHttpOpenRequest($hConnect, 'POST', '/-KbS')
_WinHttpSendRequest($hHttpRequest)
_WinHttpReceiveResponse($hHttpRequest)
Global $bChunk, $bData, $hFile
If _WinHttpQueryDataAvailable($hHttpRequest) Then
While 1
$bChunk = _WinHttpReadData($hHttpRequest, 2) ; read binary
If @error Then ExitLoop
$bData = _WinHttpBinaryConcat($bData, $bChunk) ; concat two binary data
WEnd
; Save it to the file
$hFile = FileOpen($sDir, 26)
FileWrite($hFile, $bData)
FileClose($hFile)
Else
MsgBox(48, "Error occurred", "No data available. " & @CRLF)
EndIf
; Close handles
_WinHttpCloseHandle($hHttpRequest)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)
; See what's downloaded
ShellExecute($sDir)
проблемы с библиотекой пишет типо не поддерживает 64 битmef-t сказал(а):Это связано с тем, что файл "ObelixPro-cyr.zip" не находится по ссылке "http://ska4ay.pro/-KbS"
Код:#include "WinHttp.au3" global $proxyUse = False global $sProxyServer = "IP:Port" ; указывается прокси формата ip:port Global $sDir = @ScriptDir & "\obelixpro-cyr.exe" global $Domen = "ska4ay.pro" If $proxyUse Then $hOpen = _WinHttpOpen('au3browser', $WINHTTP_ACCESS_TYPE_NAMED_PROXY, $sProxyServer) ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent Else $hOpen = _WinHttpOpen('au3browser') ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent EndIf If @error Then MsgBox(16, 'Ошибка', 'Не удалось инициализировать использование WinHttp-функций.') Exit 1 EndIf $hConnect = _WinHttpConnect($hOpen, $Domen) ;создаём соеденение, указываем только домен/ip-адрес If @error Then MsgBox(16, 'Ошибка', 'Не удалось создать соеденение.') _WinHttpCloseHandle($hOpen) Exit 2 EndIf $sData = _WinHttpSimpleRequest($hConnect, 'GET', '/-KbS', default, default, default, True) ;отправляем запрос, указываем его метод, адрес страницы без домена и параметры If @error Then MsgBox(16, 'Ошибка', 'Не удалось отправить сообщение.') Exit 3 EndIf Global $hHttpRequest = _WinHttpOpenRequest($hConnect, 'POST', '/-KbS') _WinHttpSendRequest($hHttpRequest) _WinHttpReceiveResponse($hHttpRequest) Global $bChunk, $bData, $hFile If _WinHttpQueryDataAvailable($hHttpRequest) Then While 1 $bChunk = _WinHttpReadData($hHttpRequest, 2) ; read binary If @error Then ExitLoop $bData = _WinHttpBinaryConcat($bData, $bChunk) ; concat two binary data WEnd ; Save it to the file $hFile = FileOpen($sDir, 26) FileWrite($hFile, $bData) FileClose($hFile) Else MsgBox(48, "Error occurred", "No data available. " & @CRLF) EndIf ; Close handles _WinHttpCloseHandle($hHttpRequest) _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hOpen) ; See what's downloaded ShellExecute($sDir)
Если коротко, то заходим на адрес. Получаем Cookie. Делаем POST запрос на тот же адрес с полученными Cookie. Далее идет перенаправление на другой адрес с бинарными данными, с которых формируем файл.
Единственное, делал на скорую руку и не разбирался, как сразу получить все данные и как получить имя файла.
#RequireAdmin
#Include <WinAPIEx.au3>
#Include <APIConstants.au3>
Local $sURL = 'http://www.myfontfree.com/data/4/o/obelixpro/ObelixProIt-cyr.ttf'
Local $sFileFont = 'ObelixProIt-cyr.ttf'
Local $sFileDir = @ScriptDir & '\' & $sFileFont
Local $sDst = _WinAPI_ShellGetSpecialFolderPath($CSIDL_FONTS)
InetGet($sURL, $sFileDir, 16) ; Скачиваем шрифт в исходном состоянии
If Not FileExists($sFileDir) Then MsgBox(4096, 'Ой!', 'Не получилось(((')
; Установка шрифта
Switch FileCopy($sFileDir, @WindowsDir & '\Fonts\', 1)
Case 1 ; Установка [от Yashied](http://autoit-script.ru/index.php?topic=3076.0)
$Name = _WinAPI_GetFontResourceInfo($sFileDir, 1)
If @error Then ContinueCase
If Not RegWrite('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', $Name & ' (TrueType)', 'REG_SZ', $sDst & '\' & $sFileFont) Then ContinueCase
If _WinAPI_AddFontResourceEx($sDst & '\' & $sFileFont) Then ; Добавляет ресурс шрифта из указанного файла в таблицу системных шрифтов
_WinAPI_BroadcastSystemMessage($WM_FONTCHANGE, 0, 0, $BSF_IGNORECURRENTTASK) ; Отправляет сообщение указанным получателям
Else
RegDelete('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', $Name & ' (TrueType)')
ContinueCase
EndIf
Case Else ; Если не получилось, то применяем другой способ [от Garrett]
$oShell = ObjCreate("Shell.Application")
$oShell.Namespace(0x14).CopyHere($sFileDir)
EndSwitch
ДаAlofa сказал(а):Или заморочка со шрифтом это просто для примера?