_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