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, но в
википедии слишком много вариантов, я выбрал самый простой (средний).