; Создаёт DLL структуру для использование в функции DllCall.
$tagOSVERSIONINFO = DllStructCreate('dword dwOSVersionInfoSize;dword dwMajorVersion;dword dwMinorVersion;dword dwBuildNumber;dword dwPlatformId;char szCSDVersion[128]')

; Обновляет 'размер элемента' в структуре используя DllStructGetSize для извлечения общего размера структуры.
DllStructSetData($tagOSVERSIONINFO, 'dwOSVersionInfoSize', DllStructGetSize($tagOSVERSIONINFO))

; Вызывает API-функцию 'GetVersionEx' используя DllCall и передачу структуры.
; $aReturn = DllCall('kernel32.dll', 'int', 'GetVersionEx', 'struct*', $tagOSVERSIONINFO) ; новый вариант вызывает ошибку на 3.3.6.1
$aReturn = DllCall('kernel32.dll', 'int', 'GetVersionEx', 'ptr', DllStructGetPtr($tagOSVERSIONINFO))
If @error Or Not $aReturn[0] Then
	MsgBox(4096, "Ошибка DllCall", "Произошла ошибка при извлечении системной информации.")
EndIf

; Возвращает указанные данные из структуры.
$iMajorVersion = DllStructGetData($tagOSVERSIONINFO, 'dwMajorVersion')
$iMinorVersion = DllStructGetData($tagOSVERSIONINFO, 'dwMinorVersion')
$iBuildNumber = DllStructGetData($tagOSVERSIONINFO, 'dwBuildNumber')
$PlatformID = DllStructGetData($tagOSVERSIONINFO, "dwPlatformId")
$sServicePack = DllStructGetData($tagOSVERSIONINFO, 'szCSDVersion')

; Освобождает структуру
$tagOSVERSIONINFO = 0

MsgBox(4096, "Информация о системе", "Основной: " & $iMajorVersion & @CRLF & _
		"Второстепенный: " & $iMinorVersion & @CRLF & _
		"Сборка: " & $iBuildNumber & @CRLF & _
		"Платформа ID: " & $PlatformID & @CRLF & _
		"Версия: " & $sServicePack & @CRLF)