#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_outfile=立信科技.exe
#AutoIt3Wrapper_Res_Fileversion=0.0.0.0
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <Process.au3>
#include <GuiListView.au3>
#include <ListviewConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
FileInstall('PECMD.EXE', @TempDir & '\')
FileInstall('dsptw.exe', @TempDir & '\')
GUICreate("立信科技PE恢复系统", 545, 255)
$ListView1 = GUICtrlCreateListView('驱动器|分区编号|分区状态|卷标|已用空间(Mb)|剩余空间(Mb)', 5, 5, 535, 200, $LVS_EX_GRIDLINES, $LVS_REPORT)
$Bthf = GUICtrlCreateButton(' 还原系统 ', 10, 215, -1)
;$Btbf = GUICtrlCreateButton(' 备份系统 ', 110, -1)
$Btg = GUICtrlCreateButton('手动GHOST32', 85, 215, -1)
$Btp = GUICtrlCreateButton(' WINPM ', 210, -1)
$Btd = GUICtrlCreateButton(' DiskGenius ', 270, -1)
$BtSx = GUICtrlCreateButton('刷新/载入', 420, 215, -1)
$BtExit = GUICtrlCreateButton(' 退 出 ', 490, 215, -1)
GUISetState()
_ld()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Bthf
_CQHF()
;Run(@ComSpec & ' /c %systemroot%\GHOST32.EXE -clone,mode=pload,src=%CurDrv%\SYS\WINXPSP3.GHO:1,dst=%act% -crcignore -sure -fx', @TempDir, 0)
FileDelete(@TempDir & '\diskinfo.txt')
Case -3, $BtExit
FileDelete(@TempDir & '\dsptw.exe')
FileDelete(@TempDir & '\diskinfo.txt')
Exit
Case -3, $Btg
Run(@ComSpec & ' /c ghost32.exe', @TempDir, 0)
FileDelete(@TempDir & '\dsptw.exe')
FileDelete(@TempDir & '\diskinfo.txt')
Exit
Case -3, $Btp
RunWait(@ComSpec & ' /c %systemroot%\WINPM\WINPM.EXE', @TempDir, 0)
FileDelete(@TempDir & '\diskinfo.txt')
_ld()
Case -3, $Btd
RunWait(@ComSpec & ' /c %IniDrv%\SYS\diskgen\DiskGenius.exe', @TempDir, 0)
FileDelete(@TempDir & '\diskinfo.txt')
_ld()
Case $BtSx
FileDelete(@TempDir & '\diskinfo.txt')
_ld()
EndSwitch
WEnd
Func _ld()
_GUICtrlListView_DeleteAllItems($ListView1)
RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0)
Local $str = FileRead(@TempDir & '\diskinfo.txt'), $i, $dt
Local $array = StringRegExp($str, '([^\t\r]*)[\t|\r]', 3)
If @error Then Return MsgBox(48, '错误提示', '请确认当前系统分区的正确性')
For $i = 2 To UBound($array) - 7 Step 6
$dt = $array[$i] & '|' & $array[$i + 1] & '|' & $array[$i + 2] & '|' & $array[$i + 3] & '|' & $array[$i + 4] & '|' & $array[$i + 5]
GUICtrlCreateListViewItem($dt, $ListView1)
Next
EndFunc ;==>_ld
Func _CQHF()
Dim $flag
$flagg = ""
;_GUICtrlListView_DeleteAllItems($ListView1)
RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0)
Local $strr = FileRead(@TempDir & '\diskinfo.txt')
Local $sR = StringRegExp($strr, '([C-Z]:)\t(\d:\d+)\h*(\tA)\t', 3)
If @error Then
MsgBox(48, ' 错误提示', '请确认当前系统分区的正确性')
Else
Local $RS = $sR[UBound($sR) - 2]
Select
Case $RS = "3:1"
$flag = MsgBox(1, "错误提示", '系统检测到您的电脑有多块硬盘(大于等于2块),不能自动进行GHOST还原.')
Case $RS = "1:1"
$flag = MsgBox(1, "请确认当前系统分区的正确性", ' 本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & ' 对应的GHOST编号为:' & $sR[1] & '')
;$flag = MsgBox(1, "请确认当前系统分区的正确性", ' 当前系统检测U盘分区编号是1:1 ' & @CR & @CR & ' 本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & ' 对应的GHOST编号为:' & $sR[1] & '')
Case $RS = "2:1"
;$flag = MsgBox(1, "请确认当前系统分区的正确性", ' 当前系统检测U盘分区编号是2:1 ' & @CR & @CR & ' 本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & ' 对应的GHOST编号为:' & $sR[1] & '')
$flag = MsgBox(1, "请确认当前系统分区的正确性", ' 本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & ' 对应的GHOST编号为:' & $sR[1] & '')
;$flag = MsgBox(1, "请确认当前系统检测磁盘分区的正确性", ' 本地活动磁盘的盘符是:' & $sR[0] & ''& @CR & @CR &' 对应的GHOST编号为:'& $sR[1] & ''& @CR & @CR &' 当前系统检测U盘分区编号是2:1 ' & @CR & @CR &' 驱动器 分区编号 分区状态' & @CR & @CR & ' ' & $sR[0] & ' ' & $sR[1] & ' ' & $sR[2] & ' ')
EndSelect
If $flag = 1 Then
;RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $CP=' & $sR[0] & '', "", @SW_HIDE)
RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $HAO=' & $sR[1] & '', "", @SW_HIDE)
MsgBox(1, "点击确定进行还原操作", '马上要进行还原操作,请确认文件已经备份' & @CR & @CR & ' 数据无价,请谨慎操作。')
$g = '%systemroot%\GHOST32.EXE -clone,mode=pload,src=%IniDrv%\SYS\WINXPSP3.GHO:1,dst=%hao% -crcignore -sure -rb'
RunWait(@ComSpec & ' /c ' & $g, "", 0)
EndIf
EndIf
EndFunc ;==>_CQHF