; 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