Функция _WIM_GetImageInformation

         Описание функции


_WIM_GetImageInformation

Возвращает информацию об образе в wim-файле

#Include <wimgapi.au3>
_WIM_GetImageInformation ( $hImage )

Параметры

$hImage Дескриптор возвращённый функциями _WIM_CreateFile(), _WIM_LoadImage(), _WIM_CaptureImage().

Возвращаемое значение

Успех:Возвращает массив следующего формата:
$aReturn[0] - 1 (DllCall вызван успешно)
$aReturn[1] - Строка, содержащая XML-данные образа.
Ошибка:Возвращает 0 и устанавливает @error:
@error:1 - Не удалось использовать DLL файл
2 - Неизвестный тип возвращаемого значения
3 - Не найдена функция в DLL файле
4 - Не верное число параметров
В обоих случаях @extended равен _WinAPI_GetLastError()

Примечания

Когда функция завершается успешно, то данные, описывающие образ являются в формате Unicode XML.

См. также

_WIM_CreateFile, _WIM_LoadImage, _WIM_CaptureImage

Пример

; Homes32
; http://www.autoitscript.com/forum/topic/127075-wimgapi-udf/
#include <wimgapi.au3>

$sWimPath = FileOpenDialog('Выбрать файл-образ', @WorkingDir, 'Образ (*.wim)', 3, 'install.wim')
If @error Then Exit

$aResult = _WIM_Startup() ; Открывает wimgapi.dll
If @error Then Exit MsgBox(0, 'Сообщение', 'Ошибка открытия wimgapi.dll')

$sWimList = _WIM_GetXmlTagName($sWimPath)
If @error Then Exit MsgBox(0, "Ошибка", 'Не найдена метка wim-файла.')

MsgBox(0, 'Сообщение', StringReplace($sWimList, '|', @LF))
_WIM_Shutdown() ; Выгружает wimgapi.dll
Exit

Func _WIM_GetXmlTagName($sWimFile)
    Local $hWim, $aLabel, $aXML, $s_WIM_List
    If Not FileExists($sWimFile) Then Return SetError(1, 0, '') ; Файл не существует
    ; Открыть существующий с доступом чтения
    $hWim = _WIM_CreateFile($sWimFile, $WIM_GENERIC_READ, $WIM_OPEN_EXISTING, 0, 0, 0)
    If Not $hWim Then Return SetError(2, 0, '') ; Не удалось открыть дескриптор

    $aXML = _WIM_GetImageInformation($hWim) ; Чтение информации
    _WIM_CloseHandle($hWim) ; Закрывает открытый дескриптор

    $aLabel = StringRegExp($aXML[1], "(?m)(?<=<NAME>)(.*?)(?=</NAME>)", 3) ; Извлекает имя метки в тегах <NAME>
    If @error Then
        Return SetError(3, 0, '')
    Else
        $s_WIM_List = ''
        For $i = 0 To UBound($aLabel) - 1 ; Объединяет метки в строку с разделителем
            $s_WIM_List &= $aLabel[$i] & '|'
        Next
        Return SetError(0, 0, StringTrimRight($s_WIM_List, 1))
    EndIf
EndFunc   ;==>_Get_WimLabel