joshiieeii Posted April 9, 2007 Share Posted April 9, 2007 Imagex GUIIntended for use within WinPE 2.0Note: you have to have imagex.exe in the same folder.Update 4-9-07:Added Poll image function to display what images are available within a wim file.Added Automatic Reboot functionality.gimagex.ini[CAPTURE] Source=C: Destination=MyWim.wim Compression=Fast Flags=Enterprise Config= Boot=0 Check=1 Name=My Vista Build Name Description=My Vista Build Description [APPLY] Source=M:\Vista.wim Destination=C: Verify=0 Name=1 [MAP] Letter=M: Share=\\networkshare\folder User=domain.com\TestUsergimagex.exeexpandcollapse popup#include <Constants.au3> #include <GUIConstants.au3> #include <Array.au3> #include <Process.au3> #include <String.au3> #include <GuiTreeView.au3> Dim $avDriveMapAdd[7] $avDriveMapAdd[0] = "Unknown Error" $avDriveMapAdd[1] = "Undefined / Other error" $avDriveMapAdd[2] = "Access to the remote share was denied" $avDriveMapAdd[3] = "The device is already assigned" $avDriveMapAdd[4] = "Invalid device name" $avDriveMapAdd[5] = "Invalid remote share" $avDriveMapAdd[6] = "Invalid password" Dim $avPing [5] $avPing[0] = "Unknown Error" $avPing[1] = "Host is offline" $avPing[2] = "Host is unreachable" $avPing[3] = "Bad destination" $avPing[4] = "Other errors" ; Global Settings ; Dim $gCaptureSource Dim $gCaptureDestination Dim $gCaptureCompression Dim $gCaptureFlags Dim $gCaptureConfig Dim $gCaptureBoot Dim $gCaptureCheck Dim $gCaptureName Dim $gCaptureDescription Dim $gApplySource Dim $gApplyDestination Dim $gApplyVerify Dim $gApplyName Dim $imageinfo Dim $gMapLetter Dim $gMapUser Dim $gMapPassword Dim $gMapShare Dim $sIni = @ScriptDir & "\gimagex.ini" Dim $res ; ; Create the main GUI ; GUICreate("GImageX - ImageX GUI Wrapper", 640, 380, -1, -1 ) $hTab = GUICtrlCreateTab(10, 10, 620, 355) $BaseX = 20 $BaseY = 35 ; Drive Map Tab $hTab_0 = GUICtrlCreateTabItem(" Drive Map ") $CurX = $BaseX $CurY = $BaseY $CurY = $CurY + 10 GuiCtrlCreateGroup("Drive Mapping", $CurX+10, $CurY, 580, 135) $CurY = $CurY + 18 GUICtrlCreateLabel("Letter", $CurX+20, $CurY+3) $hMapLetter = GUICtrlCreateCombo("F:", $CurX+85, $CurY, 100, 500, $CBS_DROPDOWNLIST) GUICtrlSetData(-1, "G:|H:|I:|J:|K:|L:|M:|N:|O:|P:|Q:|R:|S:|T:|U:|V:|W:|X:|Y:|Z:") $CurY = $CurY + 27 GUICtrlCreateLabel("UNC Path", $CurX+20, $CurY+3) $hMapShareEdit = GUICtrlCreateInput("\\Server\Sharename", $CurX+85, $CurY, 300) $CurY = $CurY + 27 GUICtrlCreateLabel("Username", $CurX+20, $CurY+3) $hMapUserEdit = GUICtrlCreateInput("Domain.com\%Username%", $CurX+85, $CurY, 300) $CurY = $CurY + 27 GUICtrlCreateLabel("Password", $CurX+20, $CurY+3) $hMapPasswordEdit = GUICtrlCreateInput("Password", $CurX+85, $CurY, 300, -1, $ES_PASSWORD) $hMapButtonGo = GUICtrlCreateButton("&Map!", $BaseX+500, $BaseY+290, 100) ; Capture Tab ; $hTab_1 = GUICtrlCreateTabItem(" Capture ") $CurX = $BaseX $CurY = $BaseY ; File Group $CurY = $CurY + 10 GuiCtrlCreateGroup("WIM Image", $CurX+10, $CurY, 580, 155) $CurY = $CurY + 18 GUICtrlCreateLabel("Source", $CurX+20, $CurY+3) $hCaptureSourceEdit = GUICtrlCreateInput("C:", $CurX+85, $CurY, 300) $hCaptureSourceBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY-2) $CurY = $CurY + 27 GUICtrlCreateLabel("Destination", $CurX+20, $CurY+3) $hCaptureDestEdit = GUICtrlCreateInput("MyWim.wim", $CurX+85, $CurY, 300) $hCaptureDestBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY-2) $CurY = $CurY + 27 GUICtrlCreateLabel("Compression", $CurX+20, $CurY+3) $hCaptureCompression = GUICtrlCreateCombo("Maximum", $CurX+85, $CurY, 100, 500, $CBS_DROPDOWNLIST) GUICtrlSetData(-1, "Fast") $CurY = $CurY + 27 GUICtrlCreateLabel("Name", $CurX+20, $CurY+3) $hCaptureNameEdit = GUICtrlCreateInput("My Vista Image", $CurX+85, $CurY, 300) $CurY = $CurY + 27 GUICtrlCreateLabel("Description", $CurX+20, $CurY+3) $hCaptureDescEdit = GUICtrlCreateInput("My Vista Image Description", $CurX+85, $CurY, 300) ; Options Group $CurY = $CurY + 40 GuiCtrlCreateGroup("Options", $CurX+10, $CurY, 580, 100) $CurY = $CurY + 18 GUICtrlCreateLabel("/config", $CurX+20, $CurY+3) $hCaptureConfigEdit = GUICtrlCreateInput("", $CurX+85, $CurY, 300) $hCaptureConfigBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY-2) $CurY = $CurY + 27 GUICtrlCreateLabel("/flags", $CurX+20, $CurY+3) $hCaptureFlagsEdit = GUICtrlCreateInput("Ultimate", $CurX+85, $CurY, 300) $CurY = $CurY + 27 $hCaptureBootCheck = GUICtrlCreateCheckbox("/boot (WinPE Images Only) ", $CurX+20, $CurY) $hCaptureCheckCheck = GUICtrlCreateCheckbox("/check", $CurX+190, $CurY) $hCaptureButtonGo = GUICtrlCreateButton("&Capture!", $BaseX+500, $BaseY+290, 100) ; ; Apply Tab ; $hTab_2 = GUICtrlCreateTabItem(" Apply ") $CurX = $BaseX $CurY = $BaseY ; File Group $CurY = $CurY + 10 GuiCtrlCreateGroup("WIM Image", $CurX+10, $CurY, 580, 205) $CurY = $CurY + 18 GUICtrlCreateLabel("1. Source", $CurX+20, $CurY+3) $hApplySourceEdit = GUICtrlCreateInput("MyWim.wim", $CurX+85, $CurY, 300) $hApplySourceBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY-2) $CurY = $CurY + 27 GUICtrlCreateLabel ("Input Image Number", $CurX+15, $CurY+30, 70, 30) $hApplyName = GUICtrlCreateInput("1", $CurX+85, $CurY+30, 40, 20) $hApplyNameBrowse= GUICtrlCreateButton("2. Poll Image Number", $CurX+15, $CurY+1) $treeview = GUICtrlCreateTreeView ( 150, 90, 450, 120, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE) $CurY = $CurY + 27 GUICtrlCreateLabel("Destination", $CurX+20, $CurY+103) $hApplyDestEdit = GUICtrlCreateInput("C:", $CurX+85, $CurY+100, 300) $hApplyDestBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY+98) ; Options Group $CurY = $CurY + 40 GuiCtrlCreateGroup("Options", $CurX+10, $CurY+100, 580, 50) $CurY = $CurY + 18 Dim $hReboot = GUICtrlCreateCheckbox ( "Automatically Reboot", $CurX+20, $CurY+100, 130,15) $hApplyVerifyCheck = GUICtrlCreateCheckbox("/verify", $CurX+150, $CurY+100, 100, 15 ) GUICtrlSetState ($hReboot, $GUI_CHECKED) $hApplyButtonGo = GUICtrlCreateButton("&Apply!", $BaseX+500, $BaseY+290, 100) ; ; Set Default Options ; LoadSettings() SettingsToGUI() ; ; The GUI message loop ; GuiSetState() While 1 $msg = GuiGetMsg() Select ; General Messages Case $msg = $GUI_EVENT_CLOSE ExitLoop ; Capture Messages Case $msg = $hCaptureButtonGo DoCapture() Case $msg = $hCaptureSourceBrowse $sDir = BrowseForDirectory() if $sDir Then GUICtrlSetData($hCaptureSourceEdit, $sDir) Case $msg = $hCaptureDestBrowse $sFile = BrowseForWimToSave() if $sFile Then GUICtrlSetData($hCaptureDestEdit, $sFile) Case $msg = $hCaptureConfigBrowse $sFile = BrowseForConfig() If $sFile Then GUICtrlSetData($hCaptureConfigEdit, $sFile) ; Apply Messages Case $msg = $hApplyNameBrowse PollImage() Case $msg = $hApplyButtonGo DoApply() Case $msg = $hApplyDestBrowse $sDir = BrowseForDirectory() if $sDir Then GUICtrlSetData($hApplyDestEdit, $sDir) Case $msg = $hApplySourceBrowse $sFile = BrowseForWimToLoad() if $sFile Then GUICtrlSetData($hApplySourceEdit, $sFile) ; Drive Map Messages Case $msg = $hMapButtonGo DoMapping() Case Else ;;; EndSelect WEnd Exit ; ; FUNCTIONS ; Func BrowseForDirectory() $sDir = FileSelectFolder("Select source folder", "C:") If StringRight($sDir, 1) = "\" Then $sDir = StringTrimRight($sDir, 1) Return $sDir EndFunc Func BrowseForWimToSave() $sFile = FileSaveDialog( "Select destination file", "C:\", "WIM Files (*.wim)", 3) If @error Then Return "" If StringRight($sFile, 4) <> ".wIM" Then $sFile = $sFile & ".wim" Return $sFile EndFunc Func BrowseForWimToLoad() $sFile = FileOpenDialog( "Select source file", "C:\", "WIM Files (*.wim)", 3) If @error Then Return "" Return $sFile EndFunc Func BrowseForConfig() $sFile = FileOpenDialog("Select config file", @ScriptDir, "INI files (*.ini)", 1) If @error Or StringRight($sFile, 4) <> ".ini" Then Return "" Return $sFile EndFunc Func DoCapture() $sCmd = '"' & @ScriptDir & '\imagex.exe"' If $gCaptureConfig <> "" Then $sCmd = $sCmd & ' /config "' & $gCaptureConfig & '"' If $gCaptureCompression = "fast" Then $sCmd = $sCmd & " /compress fast" Else $sCmd = $sCmd & " /compress maximum" EndIf If $gCaptureCheck = 1 Then $sCmd = $sCmd & " /check" If $gCaptureBoot = 1 Then $sCmd = $sCmd & " /boot" If $gCaptureFlags <> "" Then $sCmd = $sCmd & ' /flags "' & $gCaptureFlags & '"' $sCmd = $sCmd & ' /capture "' & $gCaptureSource & '" "' & $gCaptureDestination & '"' $sCmd = $sCmd & ' "' & $gCaptureName & '" "' & $gCaptureDescription & '"' $ret = RunWait($sCmd, @WorkingDir, @SW_SHOW) SplashTextOn ( "Return Code", "Imagex.exe returned with code = " & $ret, 400, 200, -1, -1, 32, "Tahoma", 16, 500) sleep (3000) SplashOff () EndFunc Func PollImage () Dim $nitem, $nitem Dim $imageinfo = " " $read = GUICtrlRead ($hApplySourceEdit) $sCmd = "imagex.exe" If $read = "" Then MsgBox (48, "Input required", "Please select the source") Else $sCmd = $sCmd & ' /info "' & $read & '"' EndIf ;MsgBox(0, "scmd", $sCmd) Dim $ret = Run(@ComSpec & " /c " & $sCmd & '"', @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD ) While 1 $line = StdoutRead($ret) If $line = "" Then ExitLoop $imageinfo = $imageinfo & $line ;MsgBox(0, "RunDOS", $line) If @error Then ExitLoop WEnd _GUICtrlTreeViewDeleteAllItems ($treeview) $aImageInfo = _StringBetween ( $imageinfo, "<name>", "</name>" ) $aImageDesc = _StringBetween ( $imageinfo, "<Description>", "</Description>" ) $aImageFileCount = _StringBetween ( $imageinfo, "<Filecount>", "</Filecount>" ) $aImageBuild = _StringBetween ( $imageinfo, "<Build>", "</Build>" ) $imagenumber = UBound ($aImageInfo, 1) $x = 0 Dim $nitem[$imagenumber] Do $nitem[$x] = GUICtrlCreateTreeViewItem ( "Image " & $x +1 & ": " & $aImageInfo[$x], $treeview ) GUICtrlCreateTreeViewItem ( "Description: " & $aImageDesc [$x], $nitem[$x] ) GUICtrlCreateTreeViewItem ( "File Count: " & $aImageFileCount [$x], $nitem[$x] ) GUICtrlCreateTreeViewItem ( "Build Version: " & $aImageBuild [$x], $nitem[$x] ) GUICtrlSetState($nitem[$x], $GUI_DEFBUTTON) $x = $x + 1 Until $x = $imagenumber EndFunc Func DoApply() $sCmd = '"' & @ScriptDir & '\imagex.exe"' If $gApplyVerify = 1 Then $sCmd = $sCmd & " /verify" $sCmd = $sCmd & ' /apply "' & $gApplySource & '" "' & $gApplyName & '" "' & $gApplyDestination & '"' $ret = RunWait($sCmd, @WorkingDir, @SW_SHOW) SplashTextOn ( "Return Code", "Imagex.exe returned with code = " & $ret, 400, 200, -1, -1, 32, "Tahoma", 16, 500) sleep (3000) SplashOff () $Rebootstate = GUICtrlRead ($hReboot) If $Rebootstate = 1 Then _RunDOS("Start wpeutil reboot") EndIf EndFunc Func DoMapping() $gMapLetter = IniRead($sIni, "MAP", "Letter", "V:") DriveMapDel($gMapLetter) $gMapShare = IniRead($sIni, "Map", "Share", "") $VistaAccount = GUICtrlRead ( $hMapUserEdit ) $VistaPwd = GUICtrlRead ( $hMapPasswordEdit ) $res = DriveMapAdd($gMapLetter, $gMapShare, 0, $VistaAccount, $VistaPwd) If $res Then ControlSetText("Mapping Drive", "", "Static1", "Drive successfully mapped!" ) sleep (2000) ;MsgBox(64, "Drive Mapping", "Drive successfully mapped!") Else SplashOff() MsgBox(16, "Drive Mapping", "Error mapping drive! Code: " & $avDriveMapAdd[@error]) EndIf EndFunc Func LoadSettings() $sIni = @ScriptDir & "\gimagex.ini" $gCaptureSource = IniRead($sIni, "CAPTURE", "Source", "C:") $gCaptureDestination = IniRead($sIni, "CAPTURE", "Destination", "MyWim.wim") $gCaptureCompression = IniRead($sIni, "CAPTURE", "Compression", "Maximum") $gCaptureFlags = IniRead($sIni, "CAPTURE", "Flags", "Ultimate") $gCaptureConfig = IniRead($sIni, "CAPTURE", "Config", "") $gCaptureBoot = IniRead($sIni, "CAPTURE", "Boot", "0") $gCaptureCheck = IniRead($sIni, "CAPTURE", "Check", "1") $gCaptureName = IniRead($sIni, "CAPTURE", "Name", "My Vista Build Name") $gCaptureDescription = IniRead($sIni, "CAPTURE", "Description", "My Vista Build Description") $gApplySource = IniRead($sIni, "APPLY", "Source", "C:") $gApplyDestination = IniRead($sIni, "APPLY", "Destination", "MyWim.wim") $gApplyVerify = IniRead($sIni, "APPLY", "Verify", "0") $gApplyName = IniRead($sIni, "APPLY", "Name", "My Vista Build Name") $gMapLetter = IniRead($sIni, "MAP", "Letter", "M:") $gMapShare = IniRead($sIni, "MAP", "Share", "\\Server\Share") $gMapUser = IniRead($sIni, "MAP", "User", "User") EndFunc Func SettingsToGUI() ; CAPTURE GUICtrlSetData($hCaptureSourceEdit, $gCaptureSource) GUICtrlSetData($hCaptureDestEdit, $gCaptureDestination) GUICtrlSetData($hCaptureCompression, $gCaptureCompression) GUICtrlSetData($hCaptureFlagsEdit, $gCaptureFlags) GUICtrlSetData($hCaptureConfigEdit, $gCaptureConfig) If $gCaptureBoot = 1 Then GUICtrlSetState($hCaptureBootCheck, $GUI_CHECKED) Else GUICtrlSetState($hCaptureBootCheck, $GUI_UNCHECKED) EndIf If $gCaptureCheck = 1 Then GUICtrlSetState($hCaptureCheckCheck, $GUI_CHECKED) Else GUICtrlSetState($hCaptureCheckCheck, $GUI_UNCHECKED) EndIf GUICtrlSetData($hCaptureNameEdit, $gCaptureName) GUICtrlSetData($hCaptureDescEdit, $gCaptureDescription) ; APPLY GUICtrlSetData($hApplySourceEdit, $gApplySource) GUICtrlSetData($hApplyDestEdit, $gApplyDestination) If $gApplyVerify = 1 Then GUICtrlSetState($hApplyVerifyCheck, $GUI_CHECKED) Else GUICtrlSetState($hApplyVerifyCheck, $GUI_UNCHECKED) EndIf GUICtrlSetData($hApplyName, $gApplyName) ; MAP GUICtrlSetData($hMapLetter, $gMapLetter) GUICtrlSetData($hMapShareEdit, $gMapShare) GUICtrlSetData($hMapUserEdit, $gMapUser) GUICtrlSetData($hMapPasswordEdit, $gMapPassword) EndFunc Projects:Vista Gui ImageX Deployment Tool - CompletedActive Directory Helper - CompletedGlobalized Outlook and OWA Signature Project - Completed Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now