Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27,
По поводу определения флэша...
Я проверил, на системе никогда не устанавливался флэш плеер, функция от piccaso вернула версию 6, я установил плеер, возвращает 9 - вот я и подумал, а что если просто проверять совместимость текущей версии и версии плеера? (или может есть возможность послать запрос (от лица IE) на получение инфы о том, установлен ли в системе Flash плеер?).

Вот что у меня получилось в результате:

Код: Выделить весь код
Global $oErr = ObjEvent("AutoIt.Error", "_ComError")

$FlashCurrentVersion = _GetFlashVersion()
$FlashIsCompatible = IsCompatible_Flash_Version($FlashCurrentVersion)

If Not @error Then
    MsgBox(64, "", "Flash Player is compatible (installed last version)? = " & $FlashIsCompatible)
Else
    MsgBox(48, "Error", "Please check your connection to the Internet.")
EndIf

Func IsCompatible_Flash_Version($Version=9)
    If Number($Version) <= 0 Then Return False

    Local $sSource = _HTTPGetSource("www.adobe.com", "/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash")
    If @error Then Return SetError(1, 0, -1)

    Local $InetFlashVersion = StringRegExpReplace($sSource, '(?i)(?s).*?<strong>Version</strong>:(.*?)</li>.*', '\1')
    $InetFlashVersion = StringStripWS($InetFlashVersion, 3)
    $InetFlashVersion = StringLeft($InetFlashVersion, 1)
    If Number($InetFlashVersion) > Number($Version) Then Return False
    Return True
EndFunc

Func _GetFlashVersion()
    Local $oSwf, $sVersion
    $oSwf = ObjCreate("ShockwaveFlash.ShockwaveFlash")
    If @error Then Return 0 ; No flash at all
    $oSwf.AllowScriptAccess = "always"
    $sVersion = $oSwf.GetVariable("$Version")
    If @error Then
        $oSwf = ObjCreate("ShockwaveFlash.ShockwaveFlash.3")
        If @error Then
            $oSwf = ObjCreate("ShockwaveFlash.ShockwaveFlash.2")
            If @error Then Return 0
            Return 2
        EndIf
        Return 3
    EndIf
    $sVersion = StringTrimLeft($sVersion, 3)
    $sVersion = StringLeft($sVersion, StringInStr($sVersion, ",") - 1)
    Return Number($sVersion)
EndFunc

Func _HTTPGetSource($sHost, $sPage)
    TCPStartup()

    Local $sRetSource = ""
    Local $nCurrentLine, $sRcvBytes = 1024
    Local $Name_To_IP = TCPNameToIP($sHost)
    Local $iSocket = TCPConnect($Name_To_IP, 80)

    If $iSocket = -1 Then
        TCPCloseSocket($iSocket)
        Return SetError(1, 0, 0)
    EndIf

    Local $sCommand = "GET " & $sPage & " HTTP/1.1" & @CRLF
    $sCommand &= "Host: " & $sHost & @CRLF
    $sCommand &= "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" & @CRLF
    $sCommand &= "Connection: close" & @CRLF & @CRLF

    Local $iBytesSent = TCPSend($iSocket, $sCommand)
    If $iBytesSent = 0 Or @error Then Return SetError(2, @error, 0)

    While 1
        $nCurrentLine = TCPRecv($iSocket, $sRcvBytes)
        If @error <> 0 Then ExitLoop
        If $nCurrentLine <> '' Then $sRetSource &= $nCurrentLine
    WEnd

    TCPCloseSocket($iSocket)
    TCPShutdown()

    Return $sRetSource
EndFunc

Func _ComError()
    ; Just set @error, the script will handle it...
    Local $iErr = $oErr.number
    If $iErr = 0 Then $iErr = -1
    SetError($iErr)
EndFunc
Один нюанс - я не уверен как задать «User Agent» для Http запроса, нужно в принципе для Internet Explorer, но в википедии слишком много вариантов, я выбрал самый простой (средний).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 01:48, 02-12-2007 | #799