找回密码  加入

QQ登录

只需一步,快速开始

AUTOIT CN

搜索
查看: 3311|回复: 4

[系统综合] 一个U盘启动盘制作工具

[复制链接]
发表于 2011-4-7 23:02:25 | 显示全部楼层 |阅读模式
  1. #Region ;**** 参数创建于 ACNWrapper_GUI ****
  2. #AutoIt3Wrapper_icon=1.ico
  3. #AutoIt3Wrapper_outfile=科宏U盘启动盘制作工具.exe
  4. #AutoIt3Wrapper_Compression=4
  5. #AutoIt3Wrapper_Res_Comment=QQ:215272447
  6. #AutoIt3Wrapper_Res_Description=Kehong USB System 2011
  7. #AutoIt3Wrapper_Res_Fileversion=8.0.0.2011
  8. #AutoIt3Wrapper_Res_LegalCopyright=@copyright 2011
  9. #AutoIt3Wrapper_Res_Field=CompanyName|科宏电脑科技
  10. #AutoIt3Wrapper_Res_Field=程序设计|飞天怪龙
  11. #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
  12. #include <ButtonConstants.au3>
  13. #include <ComboConstants.au3>
  14. #include <GUIConstantsEx.au3>
  15. #include <StaticConstants.au3>
  16. #include <WindowsConstants.au3>
  17. #include <GUIListView.au3>
  18. #include <ListViewConstants.au3>
  19. #include <Array.au3>
  20. #include <File.au3>
  21. #include <ProgressConstants.au3>
  22. #include <GuiImageList.au3>
  23. #include <Process.au3>
  24. #Region ### START Koda GUI section ### Form=
  25. Dim $Dll
  26. Dim $usb1






  27. Global $DwptW=@TempDir&'\DsptW.eXe'
  28. Global $ShowDrive=@TempDir&'\ShowDrive.eXe'
  29. Global $Part=@TempDir&'\Part.Txt'
  30. Global $GhostIni=@TempDir&'\Ghost.InI'
  31. If FileExists($GhostIni) Then FileDelete($GhostIni)
  32. FileInstall('ShowDrive.Vxd',$ShowDrive,1)
  33. RunWait($ShowDrive&' /S','',@Sw_Hide)
  34. FileDelete($ShowDrive)
  35. FileInstall('DsptW.Vxd',$DwptW,1)
  36. If FileExists($Part) Then FileDelete($Part)
  37. RunWait(@ComSpec&' /C '&$DwptW&' 0 /L >'&$Part,'',@Sw_Hide)
  38. $SerailNumber=StringMid(FileReadLine($Part,3),59)
  39. FileDelete($Part)
  40. For $i=1 To 26
  41.         RunWait(@ComSpec&' /C '&$DwptW&' '&$i&' /Find:All /GhostStyle >>'&$Part,'',@Sw_Hide)
  42.         If StringInStr(FileRead($Part),'Error') Then ExitLoop
  43. Next
  44.         FileDelete($DwptW)
  45. Dim $v
  46.         _FileReadToArray($Part,$v)
  47.         FileWrite($GhostIni,'[HardDisk]'&@CRLF)
  48. For $i=1 To $v[0]
  49.                 $ReadLine=FileReadLine($Part,$i)
  50.         If StringInStr($ReadLine,'Error') Then ExitLoop
  51.         If Not StringInStr($ReadLine,'No.') And StringInStr($ReadLine,':') Then
  52.                 $GhostStr=StringMid($ReadLine,6,2)&'='&StringMid($ReadLine,1,3)
  53.                 If StringMid($GhostStr,1,1)=1 And StringMid($ReadLine,6,2)='  ' Then
  54.                         FileWriteLine($GhostIni,StringReplace($GhostStr&'C:','  ',''))
  55.                 Else
  56.                         FileWriteLine($GhostIni,$GhostStr)
  57.                 EndIf
  58.                 ExitLoop
  59.         EndIf
  60. Next
  61. For $i=1 To $v[0]
  62.                 $ReadLine=FileReadLine($Part,$i)
  63.         If StringInStr($ReadLine,'Error') Then ExitLoop
  64.         If Not StringInStr($ReadLine,'No.') And StringInStr($ReadLine,':') Then
  65.                 $GhostStr=StringMid($ReadLine,6,2)&'='&StringMid($ReadLine,1,3)
  66.                 If StringMid($ReadLine,6,2)<>'' And Not StringInStr($GhostStr,'1:1') Then FileWriteLine($GhostIni,$GhostStr)
  67.         EndIf
  68. Next
  69.         FileDelete($Part)
  70.         _FileReadToArray($GhostIni,$v)
  71. For $i=2 To $v[0]
  72.         $ReadLine=StringLeft(FileReadLine($GhostIni,$i),3)
  73.         If StringLeft($ReadLine,1)=1 Then
  74.                 ExitLoop
  75.         EndIf
  76. Next
  77. $Var=IniReadSection($GhostIni,'HardDisk')
  78. If @Error Then
  79.     MsgBox(262144, '', '出错了啦! 当前目录找不到 Ghost.InI 文件.')
  80. Else
  81.     For $i = 1 To $Var[0][0]
  82.                 $GetLastP=StringMid($Var[$i][0],1,1)
  83.                 If StringInStr($GetLastP,'H') Then $GetLastP=StringMid($Var[$i+1][0],1,1)
  84.                 If $GetLastP<>1 Then
  85.                         ExitLoop
  86.                 EndIf
  87.         Next
  88.         EndIf
  89. $i = 1
  90. $Str = "CDEFGHIJKLMNOPQRSTUVWXYZ"
  91. While $i <= 24
  92. $Str1 = StringLeft($Str, $i)
  93. $Dirve = StringRight($Str1, 1)
  94. $var = DriveGetType($Dirve & ":\")
  95. If FileExists($Dirve & ":\") Then
  96.    If $var = "REMOVABLE" Then
  97. $Dirve1 = $Dirve & ":"
  98.    EndIf
  99.    If $var <> "REMOVABLE" Then
  100.            $Dirve1=""
  101.    EndIf
  102.    EndIf
  103. $i = $i + 1
  104. WEnd
  105. ini()
  106. $usbhdd=IniRead($GhostIni,"USB","name","请插入U盘")
  107. If $Dirve1<>"" Then
  108. $usbhdd1=$Dirve1&"名称:"&$usbhdd
  109. EndIf
  110. If $Dirve1="" Then
  111.         $usbhdd1="请插入U盘再运行本程序!"
  112.         MsgBox(64,"","你没有插入U盘请插入U盘再运行本程序!")
  113.         Exit
  114. EndIf
  115. FileInstall("SkinCrafterDll.dll", @TempDir & "\SkinCrafterDll.dll", 1)
  116. FileInstall("vista.skf", @TempDir & "\vista.skf", 1)
  117. $Form1 = GUICreate("欢迎您使用科宏U盘启动盘制作工具", 395, 405, -1, -1)
  118. _SkinGUI(@TempDir & "\SkinCrafterDll.dll", @TempDir & "\vista.skf", $Form1)
  119. FileInstall("usb-PE.bmp",@TempDir&"\usb-PE.bmp",1)
  120. $Pic1 = GUICtrlCreatePic(@TempDir&"\usb-PE.bmp", 0, 0, 395, 90)
  121. $Label1 = GUICtrlCreateLabel("选择要制作的U盘", 24, 138, 90, 20)
  122. $Combo1 = GUICtrlCreateCombo($usbhdd1, 125, 136, 240, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
  123. $Labelzip = GUICtrlCreateLabel("选择U盘启动格式", 24 , 108, 90, 20)
  124. $Combo2 = GUICtrlCreateCombo("", 125, 106, 240, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
  125. GUICtrlSetData($Combo2, "USB-HDD|USB-ZIP", "USB-HDD")
  126. $ListView1 = GUICtrlCreateListView("分区|序号|文件系统|已用容量|剩余容量|总容量(GB)", 24, 160, 345, 100)
  127. GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 35)
  128. GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 35)
  129. GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 60)
  130. GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 60)
  131. GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 60)
  132. GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 5,80)
  133. _GUICtrlListView_JustifyColumn(GUICtrlGetHandle($ListView1), 0, 2)
  134. _GUICtrlListView_JustifyColumn(GUICtrlGetHandle($ListView1), 1, 2)
  135. _GUICtrlListView_JustifyColumn(GUICtrlGetHandle($ListView1), 2, 2)
  136. _GUICtrlListView_JustifyColumn(GUICtrlGetHandle($ListView1), 3, 2)
  137. _GUICtrlListView_JustifyColumn(GUICtrlGetHandle($ListView1), 4, 2)
  138. _GUICtrlListView_JustifyColumn(GUICtrlGetHandle($ListView1), 5, 2)
  139. $z = 0
  140.         _GUICtrlListView_DeleteAllItems($ListView1)
  141.         $read = IniReadSection($GhostIni,"HardDisk")
  142.                 If @error Then
  143.                         MsgBox(64,"","错误")
  144.                         EndIf
  145.         If Not @error Then
  146.                        
  147.                 For $i = 1 To $read[0][0]
  148.                                                 $fjxt=DriveGetFileSystem($read[$i][0])
  149.                                                 $zrl=Round(DriveSpaceTotal($read[$i][0])/1024,2)
  150.                                                 $syrl=Round(DriveSpaceFree($read[$i][0])/1024,2)
  151.                                                 $usrl=Round($zrl-$syrl,2)
  152.          GUICtrlCreateListViewItem($read[$i][0], $ListView1)
  153.                         _GUICtrlListView_AddSubItem($ListView1, $z, $read[$i][1], 1, $z+1)
  154.                                                  _GUICtrlListView_AddSubItem($ListView1, $z, $fjxt, 2, $z+1)
  155.                                                   _GUICtrlListView_AddSubItem($ListView1, $z, $syrl, 4, $z+1)
  156.                                                   _GUICtrlListView_AddSubItem($ListView1, $z, $zrl, 5, $z+1)
  157.                                                    _GUICtrlListView_AddSubItem($ListView1, $z, $usrl, 3, $z+1)
  158.                         $z += 1               
  159.                 Next
  160.                         EndIf
  161.                         _GUICtrlListView_SetItemSelected($ListView1, $read[0][0]-1)
  162.                         GUICtrlCreateGroup("科宏提醒您",24,260,350,55)
  163.                         GUICtrlCreateLabel("本程序制作成的U盘启动盘具有三防特性:防毒﹑防删﹑防格",32,280,340,15)
  164.                         GUICtrlCreateLabel("运行本程序,请关闭安全软件,谢谢您的合作,祝您成功!",34,295,335,15)

  165. $Button3 = GUICtrlCreateButton("开始制作(&S)", 30, 363, 90, 30)
  166. $Button5 = GUICtrlCreateButton("还原U盘(&U)", 157, 363, 90, 30)
  167. $ZT=GUICtrlCreateLabel("当前状态:等待用户确认设置开始制作...",24,330,380,20)
  168. $pro=GUICtrlCreateProgress(24,345,350,8,$PBS_SMOOTH)
  169. If $Dirve1="" Then
  170.         GUICtrlSetState($Button3,$GUI_DISABLE)
  171.         EndIf
  172. $Button4 = GUICtrlCreateButton("退出", 280, 363, 90, 30)
  173. GUISetState(@SW_SHOW)
  174. #EndRegion ### END Koda GUI section ###

  175. While 1
  176.         $nMsg = GUIGetMsg()
  177.         Switch $nMsg
  178.                
  179.                 Case $Button4
  180.                         quit()
  181.                 Case $GUI_EVENT_CLOSE
  182.                         quit()
  183.                 Case $Button3
  184.                         GUICtrlSetState($Button3,$GUI_DISABLE)
  185.                         GUICtrlSetState($Button4,$GUI_DISABLE)
  186.                         GUICtrlSetState($Button5,$GUI_DISABLE)
  187.                         $ZIP=GUICtrlRead($Combo2)
  188.                         If $ZIP="USB-HDD" Then
  189.                                 $usb1=""
  190.                         EndIf
  191.                                 If $ZIP="USB-ZIP" Then
  192.                                 $usb1=" --ZIP"
  193.                         EndIf       
  194.                         $ZZUSB=GUICtrlRead($Combo1)
  195.                         $ZZUSBHDD=StringLeft($ZZUSB,2)
  196.                         $HDFB=IniRead($GhostIni,"HardDisk",$ZZUSBHDD,"2:1")
  197.                         $HDFB2=StringLeft($HDFB,1)
  198.                         $HDFB1=$HDFB2-1
  199.                         GUICtrlSetData($pro,10)
  200.                         $ask=MsgBox(64+4,"提示","你选择的了将"&$ZZUSB&"制作成可启动U盘"&@CRLF&"要确定开始制作,请点击“是”,否则点击“否”")
  201.                         If $ask=6 Then
  202.                                 GUICtrlSetData($ZT,"当前状态:正在准备程序必须数据中,请稍候...")
  203.                                 FileInstall("fbinst.exe",@WindowsDir&"\fbinst.exe",1)
  204.                                 ;RunWait(@ComSpec & " /c " & @WindowsDir&"\fbinst (hd"&$HDFB1&")"&"format --raw", @ScriptDir, @SW_HIDE)
  205.                                 RunWait(@WindowsDir&"\fbinst (hd"&$HDFB1&")"&" format --raw --force",@WindowsDir,@SW_HIDE)
  206.                                 GUICtrlSetData($pro,20)
  207.                                 ;RunWait(@ComSpec & " /c " & @WindowsDir&"\fbinst (hd"&$HDFB1&")"&"format --extended 125m  --force --fat32 --align --primary 8m",@ScriptDir, @SW_HIDE)
  208.                                 RunWait(@WindowsDir&"\fbinst (hd"&$HDFB1&")"&" format --extended 90m  --force"&$usb1&" --fat32 --align --primary 8m",@WindowsDir,@SW_HIDE)
  209.                                 GUICtrlSetData($ZT,"当前状态:正在将引导程序写入U盘中,请稍候...")
  210.                                 GUICtrlSetData($pro,40)
  211.                                 Sleep(1000)
  212.                                 GUICtrlSetData($ZT,"当前状态:正在准备U盘PE数据和必备文件中,请稍候...")
  213.                                 FileInstall("amwin.fba",@WindowsDir&"\abc.fba",1)
  214.                                 GUICtrlSetData($pro,60)
  215.                                 GUICtrlSetData($ZT,"当前状态:正在将PE维护系统数据写入U盘中,请稍候...")
  216.                                 ;RunWait(@ComSpec & " /c " & @WindowsDir&"\fbinst (hd"&$HDFB1&")"&"load "&@WindowsDir&"\abc.fba",@ScriptDir, @SW_HIDE)
  217.                                 RunWait(@WindowsDir&"\fbinst (hd"&$HDFB1&")"&" load "&@WindowsDir&"\abc.fba",@WindowsDir,@SW_HIDE)
  218.                                 GUICtrlSetData($pro,90)
  219.                                 FileDelete(@WindowsDir&"\fbinst.exe")
  220.                                 FileDelete(@WindowsDir&"\abc.fba")
  221.                                 Sleep(1000)
  222.                 GUICtrlSetData($pro,100)
  223.                                 GUICtrlSetData($ZT,"当前状态:所有任务全部完成!")
  224.                                 MsgBox(64,"恭喜","科宏U盘启动盘制作成功")
  225.                                 quit()
  226.                         EndIf
  227.                        
  228.                
  229.                        
  230.                        
  231.                
  232.                        
  233.                         If $ask=7 Then
  234.                                                         GUICtrlSetState($Button3,$GUI_ENABLE)
  235.                         GUICtrlSetState($Button4,$GUI_ENABLE)
  236.                         GUICtrlSetState($Button5,$GUI_ENABLE)
  237.                         GUICtrlSetData($pro,0)
  238.                 EndIf
  239.         Case $Button5
  240.                                         $ZZUSB=GUICtrlRead($Combo1)
  241.                         $ZZUSBHDD=StringLeft($ZZUSB,2)
  242.                         $HDFB=IniRead($GhostIni,"HardDisk",$ZZUSBHDD,"2:1")
  243.                         $HDFB2=StringLeft($HDFB,1)
  244.                         $HDFB1=$HDFB2-1
  245.                         GUICtrlSetState($Button3,$GUI_DISABLE)
  246.                         GUICtrlSetState($Button4,$GUI_DISABLE)
  247.                         GUICtrlSetState($Button5,$GUI_DISABLE)
  248.                 $ask1=MsgBox(64+4,"提示","你选择的了将"&$ZZUSB&"U盘重置到默认状态,"&@CRLF&"要确定重置U盘,请点击“是”,否则点击“否”")
  249.                 If $ask1=6 Then
  250.                         GUICtrlSetData($ZT,"当前状态:正在重置U盘中,请稍候...")
  251.                         FileInstall("fbinst.exe",@WindowsDir&"\fbinst.exe",1)
  252.                         RunWait(@WindowsDir&"\fbinst (hd"&$HDFB1&")"&" format --raw --force",@WindowsDir,@SW_HIDE)
  253.                         GUICtrlSetData($pro,100)
  254.                         Sleep(1000)
  255.                         MsgBox(64,"提示","重置U盘状态成功!")
  256.                         GUICtrlSetData($ZT,"当前状态:等待用户确认设置开始制作...")
  257.                         GUICtrlSetData($pro,0)
  258.                                                                                 GUICtrlSetState($Button3,$GUI_ENABLE)
  259.                         GUICtrlSetState($Button4,$GUI_ENABLE)
  260.                         GUICtrlSetState($Button5,$GUI_ENABLE)
  261.                 EndIf
  262.                                         If $ask1=7 Then
  263.                                                         GUICtrlSetState($Button3,$GUI_ENABLE)
  264.                         GUICtrlSetState($Button4,$GUI_ENABLE)
  265.                         GUICtrlSetState($Button5,$GUI_ENABLE)
  266.                         GUICtrlSetData($pro,0)
  267.                 EndIf
  268.         EndSwitch
  269. WEnd

  270. Func ini()
  271.         $strComputer = "."
  272.         $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
  273.         $colItems = $objWMIService.ExecQuery("Select * from Win32_diskdrive")
  274.         For $objItem In $colItems
  275.                 IniWrite($GhostIni, $objItem.interfacetype, "Name", $objItem.caption)
  276.                 $num = StringSplit($objItem.PNPDeviceID, "\")
  277.                 $ii = UBound($num)
  278.                 $ii = $ii - 1
  279.                 $number = String($num[$ii])
  280.                 IniWrite($GhostIni, $objItem.interfacetype, "ID", $number)
  281.         Next
  282. EndFunc   ;==>ini
  283. Func _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle)
  284.         $Dll = DllOpen($SkincrafterDll)
  285.         DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "1", "wstr", "", "wstr", "1@1.com", "wstr", "1")
  286.         DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1)
  287.         DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin)
  288.         DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25)
  289.         DllCall($Dll, "int:cdecl", "ApplySkin")
  290. EndFunc   ;==>_SkinGUI
  291. Func quit()
  292.         GUISetState(@SW_HIDE)
  293.         DllCall($Dll, "int:cdecl", "DeInitDecoration")
  294.         DllCall($Dll, "int:cdecl", "RemoveSkin")
  295.         DllClose($Dll)
  296.         FileDelete(@TempDir & "\SkinCrafterDll.dll")
  297.         FileDelete(@TempDir & "\vista.skf")
  298.         FileDelete($GhostIni)
  299.         FileDelete($DwptW)
  300.         FileDelete($ShowDrive)
  301.         FileDelete(@TempDir&"\usb-PE.bmp")
  302.         Exit
  303. EndFunc
复制代码
HDD模式能制作成功,但是ZIP不能,麻烦高手们帮我修改一下
发表于 2011-4-8 08:57:56 | 显示全部楼层
占个沙发,学习一下
发表于 2011-4-8 09:02:26 | 显示全部楼层
调用了什么软件?
发表于 2011-4-13 14:31:54 | 显示全部楼层
fbinst记得好像小于2G的U盘才能格式成ZIP的
发表于 2011-4-14 08:42:02 | 显示全部楼层
代码收下.....
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2019-12-16 07:39 , Processed in 0.078125 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表