AllenAA's post in About data stream extraction was marked as the answer
try this:
#RequireAdmin
#include-once
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstants.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <FileConstants.au3>
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
Global $BoFile ; boot.wim Path
Global $MoFile ; install.wim OR install.esd Path
Global $DISM_PATH = @SystemDir & '\Dism.exe'
Global $oDic , $iIndexSelected
GuiMain()
While 1
Sleep(80) ; Sleep to reduce CPU usage
WEnd
Func GuiMain()
Global $Main = GUICreate("MosBoot", 600, 300, -1, -1)
Global $BtnSoFileShow = GUICtrlCreateInput("install.wim Or install.esd", 16, 89, 465, 21,BitOR($ES_AUTOHSCROLL,$ES_READONLY))
Global $Panel = GUICtrlCreateGroup("", 8, 0, 584, 291)
Global $BtnSoFileFind = GUICtrlCreateButton("install", 507, 88, 75, 25)
GUICtrlSetOnEvent($BtnSoFileFind, "_SoFileFind")
Global $BtnStart = GUICtrlCreateButton("Start", 293, 220, 75, 25)
Global $BtnExit = GUICtrlCreateButton("Exit", 406, 220, 75, 25)
Global $ImageIteam = GUICtrlCreateCombo("Select", 16, 51, 566, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL,$ES_READONLY))
GUICtrlSetOnEvent($ImageIteam, "ImageIteam")
Global $Input2 = GUICtrlCreateInput("USB OR RAID Drivers", 16, 165, 465, 21,BitOR($ES_AUTOHSCROLL,$ES_READONLY))
Global $BtnBoot = GUICtrlCreateButton("boot", 507, 126, 75, 25)
Global $Input3 = GUICtrlCreateInput("boot.wim", 16, 127, 465, 21,BitOR($ES_AUTOHSCROLL,$ES_READONLY))
Global $BtnDrv = GUICtrlCreateButton("Drivers", 507, 164, 75, 25)
Global $Progress1 = GUICtrlCreateProgress(16, 20, 566, 17)
Local $iLeft = 8, $iTop = 1, $iWidth = 584, $iHeight = 291, $iColor = 0x142d01, $PanelCol = $GUI_BKCOLOR_TRANSPARENT ; 0xFFFFE0 ;
_GuiCtrlGroupSetColor($iLeft, $iTop, $iWidth, $iHeight, $iColor, $PanelCol) ; Panel - Colouring
GUISetState(@SW_SHOW)
_Initial()
GUISetOnEvent($GUI_EVENT_CLOSE, "_GUI_Event")
GUISetOnEvent($BtnExit, "_GUI_Event")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUI_Event")
GUISetOnEvent($GUI_EVENT_RESTORE, "_GUI_Event")
EndFunc ;==>Example
Func ImageIteam()
$iIndexSelected = ""
Local $sReadCombo = GUICtrlRead($ImageIteam)
If StringLen($sReadCombo) = 0 Then Return SetError(1,0,'')
If Not IsObj($oDic) Then Return SetError(2,0,'')
If Not $oDic.Exists(String(StringToBinary($sReadCombo))) Then Return SetError(3,0,'')
$iIndexSelected = $oDic.Item(String(StringToBinary($sReadCombo)))
ConsoleWrite('+ Selected: ' & $iIndexSelected & @CRLF)
EndFunc
Func _Initial()
If Not $DISM_PATH Or Not FileExists($DISM_PATH) Then MsgBox(48, "DISM", "Dism.exe is required.")
EndFunc
Func _SoFileFind()
Local $sFileOpenDialog = FileOpenDialog("Select Windows Image File", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", "Windows Image File (*.wim;*.esd)", $FD_FILEMUSTEXIST)
If @error Then Return SetError(1, 0, 0)
GUICtrlSetData($BtnSoFileShow, $sFileOpenDialog) ; Set the inputbox with the filepath.
$MoFile = $sFileOpenDialog
_GetImageInfo($MoFile)
EndFunc
Func _GetImageInfo($sWimFile)
Local $DISMp = Run($DISM_PATH & ' /Get-ImageInfo /ImageFile:' & $sWimFile & ' /English','','', $STDOUT_CHILD+$STDERR_CHILD)
Local $sRet , $aRet , $sStrCombo
While ProcessExists($DISMp)
$sRet &= StdoutRead($DISMp)
WEnd
$oDic = 0
$oDic = ObjCreate('Scripting.Dictionary')
$aRet = StringRegExp($sRet,'(?i)Index\h*:\h*(\d+)\s+Name\h*:\h*(\V+)',3)
If Not @error Then
For $i = 0 To UBound($aRet) - 1 Step 2
$sStrCombo &= '|' &$aRet[$i + 1]
$oDic.Add(String(StringToBinary($aRet[$i + 1])) , $aRet[$i])
Next
GUICtrlSetData($ImageIteam , $sStrCombo , $aRet[1])
EndIf
EndFunc
Func _GUI_Event()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $BtnExit
GUIDelete($Main)
Exit
Case $GUI_EVENT_MINIMIZE
GUISetState(@SW_MINIMIZE, $Main)
Case Else
MsgBox(4096, "Error GUI Event", "UnKnow GUI Event !", 180, 12)
EndSwitch
EndFunc
Func _GuiCtrlGroupSetColor($iLeft, $iTop, $iWidth, $iHeight, $iBorderColor = 0x000000, $iBkGndCol0r = $GUI_BKCOLOR_TRANSPARENT)
GUICtrlCreateGraphic(-1, -1)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $iBorderColor, $iBkGndCol0r)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, $iLeft, $iTop + 8, $iWidth, $iHeight - 7)
EndFunc ;==>_GuiCtrlGroupSetColor