mxhk 发表于 2012-1-18 23:59:22

AU3U盘安装fba工具加入自动安装FBA

下面是都市浪子的代码,这个事是手动添加fba如何让程序默认安装自己的FBA又可以手动选择,两项功能同事呢,希望高手指点感激不尽

#NoTrayIcon
#Region AutoIt3Wrapper 预编译参数(常用参数)
#AutoIt3Wrapper_Icon= usb.ico                                                                ;图标,支持EXE,DLL,ICO
#AutoIt3Wrapper_OutFile= U盘启动盘制作工具.exe                                        ;输出文件名
#AutoIt3Wrapper_OutFile_Type=exe                                                      ;文件类型
#AutoIt3Wrapper_Compression=4                                                                ;压缩等级
#AutoIt3Wrapper_UseUPX=n                                                                         ;使用压缩
#AutoIt3Wrapper_Res_Comment= U盘启动盘制作工具                              ;注释
#AutoIt3Wrapper_Res_Description= U盘启动盘制作工具                        ;详细信息
#AutoIt3Wrapper_Res_FileVersion= 2011                                                ;文件版本
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n                              ;自动更新版本
#AutoIt3Wrapper_Res_LegalCopyright= 没版权都市浪子修改 QQ:270883359                        ;版权
#AutoIt3Wrapper_Change2CUI=N                                                   ;修改输出的程序为CUI(控制台程序)
;#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%                ;自定义资源段
;#AutoIt3Wrapper_Run_Tidy=                                                   ;脚本整理
;#AutoIt3Wrapper_Run_Obfuscator=                                                      ;代码迷惑
;#AutoIt3Wrapper_Run_AU3Check=                                                               ;语法检查
;#AutoIt3Wrapper_Run_Before=                                                               ;运行前
;#AutoIt3Wrapper_Run_After=                                                                        ;运行后
#EndRegion AutoIt3Wrapper 预编译参数(常用参数)
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Process.au3>
#include <EditConstants.au3>





Global $fba_t_xi = "选择要写入到U盘的FBA文件"
Global $hd_t_xi = "选择USB可移动磁盘"


DirCreate(@TempDir & "\Skin")
FileInstall(".\Skin\Skin.dll" ,@TempDir & "\Skin\Skin.dll" ,1 )
FileInstall(".\Skin\storm.she" ,@TempDir & "\Skin\storm.she",1 )
Global $iHover = -1
Global $SkinDll = DllOpen(@TempDir & "\Skin\Skin.dll")




DllCall($SkinDll, "int", "SkinH_AttachEx", "str", @TempDir & "\Skin\storm.she", "str", "mhgd")
DllCall($SkinDll, "int", "SkinH_SetAero", "int", 1)
#Region ### START Koda GUI section ### Form=

$title = "U盘启动盘制作工具 v0.1"

#Region ### START Koda GUI section ### Form=D:\我的文档\桌面\U盘启动盘制作工具GUI(代码)\4444.kxf
$Form1 = GUICreate($title, 303, 412, 280, 142)
$Group1 = GUICtrlCreateGroup("请选择USB可移动磁盘:", 8, 11, 285, 75)
;$Combo1 = GUICtrlCreateCombo("", 16, 97, 200, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
$Combo1 = GUICtrlCreateCombo("", 16, 33, 200, 25, BitOR($GUI_SS_DEFAULT_COMBO,$CBS_SIMPLE))

$Button1 = GUICtrlCreateButton("刷 新", 223, 31, 60, 27)
$lab = GUICtrlCreateLabel("程序没检测到有USB磁盘", 16, 58, 270, 25)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlCreateGroup("", -99, -99, 1, 1)


$Group2 = GUICtrlCreateGroup("请选择要制作的模式:", 8, 98, 285, 57)
$Combo2 = GUICtrlCreateCombo("", 16, 119, 200, 25, BitOR($GUI_SS_DEFAULT_COMBO,$CBS_SIMPLE))
GUICtrlSetData(-1, "USB-HDD模式(FAT16)|USB-HDD模式(FAT32){推荐}|USB-ZIP模式(FAT16)|USB-ZIP模式(FAT32)|USB-ZIP模式(FAT16)[复制PBP到MBR]", "USB-HDD模式(FAT32){推荐}")
$Checkbox1 = GUICtrlCreateCheckbox("CHS模式", 223, 119, 60, 20)
GUICtrlCreateGroup("", -99, -99, 1, 1)


$Group_fba = GUICtrlCreateGroup("请选择FBA文件:", 8, 163, 285, 57)
$Button_fba = GUICtrlCreateButton("浏 览", 229, 188, 60, 27)
$Input_FBA = GUICtrlCreateInput("", 24, 187, 193, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)

GUICtrlCreateGroup("", 8, 280, 285, 60)
$Label1 = GUICtrlCreateLabel("", 15, 290, 275, 45)
GUICtrlCreateGroup("", -99, -99, 1, 1)


$Button2 = GUICtrlCreateButton("归还U盘空间", 200, 350, 83, 25)
$Button3 = GUICtrlCreateButton("一键制成USB启动盘", 16, 350, 180, 41)
$Button4 = GUICtrlCreateButton("退    出", 200, 380, 83, 25)

$Group3 = GUICtrlCreateGroup("UD区空间", 8, 224, 285, 65)   ;BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE))
$Combo_ud_zice = GUICtrlCreateCombo("比FBA文件大50M", 24, 248, 115, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE))
GUICtrlSetData(-1, "比FBA文件大100M|比FBA文件大200M|比FBA文件大300M|比FBA文件大500M|自定义UD区空间")
$Input_SICE=GUICtrlCreateInput("286", 165, 248, 30, 21 , $ES_NUMBER)
GUICtrlCreateLabel("为:", 142, 250, 20, 21)
GUICtrlCreateLabel("MB", 200, 250, 153, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)


GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

if FileExists(@ScriptDir & "\dslz.fba")Then
      GUICtrlSetData($Input_FBA, @ScriptDir & "\dslz.fba")
      
      $FBA_SIZE=GUICtrlRead($Input_FBA)
      $FBA_SIZE=FileGetSize($FBA_SIZE)
      $FBA_SIZE=Round ($FBA_SIZE / 1024 /1024+ 50)
      modif_FBA_SIZE($FBA_SIZE);修改UD区空间
      ;MsgBox(0,0, $FBA_SIZE )
      
EndIf


if FileExists(@ScriptDir & "\FB.fba")Then
      GUICtrlSetData($Input_FBA, @ScriptDir & "\FB.fba")
      
      $FBA_SIZE=GUICtrlRead($Input_FBA)
      $FBA_SIZE=FileGetSize($FBA_SIZE)
      $FBA_SIZE=Round ($FBA_SIZE / 1024 /1024+ 50)
      modif_FBA_SIZE($FBA_SIZE);修改UD区空间
      ;MsgBox(0,0, $FBA_SIZE )
      
EndIf



USB()
GUISetState(@SW_SHOW)

;WinSetOnTop($title, "", 1)

#EndRegion ### END Koda GUI section ###

AdlibRegister('_HoverEffect', 500)
;AdlibUnRegister('_HoverEffect')




While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE, $Button4
                        Exit_()
                Case $Button1
                        GUICtrlSetState($Button1, $GUI_DISABLE)
                        USB()
                        GUICtrlSetState($Button1, $GUI_ENABLE)
                Case $Button3 ; 一键制成USB启动盘
                        if not FileExists( "c:\fbinst.exe") Then FileInstall("fbinst.exe", "c:\fbinst.exe", 1)
                        $fba_file = GUICtrlRead($Input_FBA) ; 读取FBA文件
                        If $fba_file = "" Or Not FileExists($fba_file) Then
                              MsgBox(262144 + 64, "错误", "没选择FBA文件")
                        Else
                              If GUICtrlRead($Combo1) <> "" Then
                                        AdlibUnRegister('_HoverEffect')
                                        $HD = StringLeft(GUICtrlRead($Combo1), 5) ; 读取选择的USB磁盘
                                        $MS = GUICtrlRead($Combo2) ; 读取类型
                                        GUICtrlSetState($Button2, $GUI_DISABLE)
                                        GUICtrlSetState($Button3, $GUI_DISABLE)
                                        GUICtrlSetData($Label1, "正在把格式化USB磁盘并把FBA文件写入到UD区" &@CRLF & "请稍等..." )
                                       
                                        $size=GUICtrlRead($Input_SICE)& "MB"; 读取UD的空间大小
                                       
                                        ;MsgBox(262144,0,$size )
                                        Select
                                                ;Case FileGetSize(@ScriptDir & '\fbinst.exe') <> 76743
                                                ;MsgBox(262144 + 16, '错误', @ScriptDir & '\fbinst.exe' & "文件不存在或已损坏。")
                                                ;Exit_()
                                                ;Case FileGetSize(@ScriptDir & '\U-Disk-System.fba') <> 111682560
                                                ;MsgBox(262144 + 16, '错误', "U-Disk-System.fba文件不存在或已损坏。")
                                                ;Exit_()
                                                Case $MS == 'USB-HDD模式(FAT16)'
                                                      If GUICtrlRead($Checkbox1) == $GUI_CHECKED Then
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--fat16--primary8m--chs--archive"' & $fba_file & '"', "c:\", "", @SW_HIDE)
                                                      Else
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--fat16--primary8m--archive"' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                      EndIf
                                                Case $MS == 'USB-HDD模式(FAT32){推荐}'
                                                      If GUICtrlRead($Checkbox1) == $GUI_CHECKED Then
                                                      ;      MsgBox(0,"++chs",'fbinst.exe   '& $HD & ' format--extended   ' & $size & '   --force--align--fat32--primary8m--chs--archive"' & $fba_file & '"')
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--fat32--primary8m--chs--archive"' & $fba_file & '"', @ScriptDir, @SW_HIDE)
                                                      Else
                                                                ;      MsgBox(0,"--chs",'fbinst.exe   '& $HD & ' format--extended   ' & $size & '   --force--align--fat32--primary8m    --archive"' & $fba_file & '"')
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--fat32--primary8m         --archive"' & $fba_file & '"', @ScriptDir,"", @SW_HIDE)
                                                      EndIf
                                                Case $MS == 'USB-ZIP模式(FAT16)'
                                                      If GUICtrlRead($Checkbox1) == $GUI_CHECKED Then
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--zip--fat16--primary8m--chs--archive"' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                      Else
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--zip--fat16--primary8m         --archive"' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                      EndIf
                                                Case $MS == 'USB-ZIP模式(FAT32)'
                                                      If GUICtrlRead($Checkbox1) == $GUI_CHECKED Then
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--zip--fat32--primary8m--chs--archive"' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                      Else
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--zip--fat32--primary8m         --archive"' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                      EndIf
                                                Case $MS == 'USB-ZIP模式(FAT16)[复制PBP到MBR]'
                                                      If GUICtrlRead($Checkbox1) == $GUI_CHECKED Then
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--zip--fat16--primary8m--chs--archive"' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                      Else
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format--extended   ' & $size & '   --force--align--zip--fat16--primary8m         --archive"' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                      EndIf
                                                      ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' sync --copy-bpb--max-sectors 63', "c:\", "" ,@SW_HIDE);复制PBP到MBR
                                                EndSelect
                                       
                                        GUICtrlSetState($Button2, $GUI_ENABLE)
                                        GUICtrlSetState($Button3, $GUI_ENABLE)
                                       
                                        AdlibRegister('_HoverEffect', 500)
                                        MsgBox(262144 + 4096 + 64, '提示', 'USB启动盘制作完成。请断开USB可移动磁盘后重新插上再进行其它操作!')
                              Else
                                        MsgBox(262144 + 64, '提示', '请选择USB可移动磁盘!')
                              EndIf
                        EndIf
                Case $Button2 ; 归还U盘空间
                        if not FileExists( "c:\fbinst.exe") Then FileInstall("fbinst.exe", "c:\fbinst.exe", 1)
                        If GUICtrlRead($Combo1) <> "" Then
                        ;      MsgBox(0,0,"归还U盘空间"&@CRLF & 'fbinst'&StringLeft(GUICtrlRead($Combo1), 5) & ' format --raw --force')
                              GUICtrlSetState($Button3, $GUI_DISABLE)
                              RUNWait('c:\fbinst.exe   '&StringLeft(GUICtrlRead($Combo1), 5) & ' format --raw --force', "c:\" , @SW_HIDE)
                              GUICtrlSetState($Button3, $GUI_ENABLE)
                              MsgBox(262144+4096 + 64, '提示', '格式化完成,已恢复U盘全部空间。')
                        Else
                              MsgBox(262144 + 4096 + 16, '提示', '请选择USB可移动磁盘!')
                        EndIf
                Case $Button_fba
                        
                        $fba_ff = FileOpenDialog("选择要写入到U盘的FBA文件", @ScriptDir, "FBA文件(*.fba)|所有文件(*.*)")
                        If $fba_ff = "" Then
                              MsgBox(262144 + 64, "错误", "没选择FBA文件")
                        Else
                              GUICtrlSetData($Input_FBA, $fba_ff)
                              $fba_t_xi = "选择的FBA 文件:" & @CRLF & "" & $fba_ff
                              
                         $FBA_SIZE=Round(FileGetSize(GUICtrlRead($Input_FBA)) / 1024 /1024 )
                         $read_ud_zic=GUICtrlRead($Combo_ud_zice)
                        Select
                               Case $read_ud_zic = "比FBA文件大50M"
                                    $FBA_SIZE = $FBA_SIZE + 50
                                          
                               Case $read_ud_zic = "比FBA文件大100M"
                                    $FBA_SIZE = $FBA_SIZE + 100
                                          
                               Case $read_ud_zic = "比FBA文件大200M"
                                    $FBA_SIZE = $FBA_SIZE + 200
                                          
                               Case $read_ud_zic = "比FBA文件大300M"
                                    $FBA_SIZE = $FBA_SIZE + 300
                                          
                               Case $read_ud_zic = "比FBA文件大500M"
                                    $FBA_SIZE = $FBA_SIZE + 500
                                  Case $read_ud_zic = "自定义UD区空间"
                                        ;MsgBox(0,0,"自定义UD区空间")
                                          $FBA_SIZE = $FBA_SIZE + 8
                        EndSelect
                        
                        modif_FBA_SIZE($FBA_SIZE);修改UD区空间
                        
                        EndIf
                Case $Combo1   ; 选择USB碰磁盘
                        $tt=GUICtrlRead($Combo1)
                        GUICtrlSetData($lab,$tt)

      Case $Combo_ud_zice ; 设置UD区大小
                         $FBA_SIZE=Round(FileGetSize(GUICtrlRead($Input_FBA)) / 1024 /1024 )
                         $read_ud_zic=GUICtrlRead($Combo_ud_zice)
                        Select
                               Case $read_ud_zic = "比FBA文件大50M"
                                    $FBA_SIZE = $FBA_SIZE + 50
                                          
                               Case $read_ud_zic = "比FBA文件大100M"
                                    $FBA_SIZE = $FBA_SIZE + 100
                                          
                               Case $read_ud_zic = "比FBA文件大200M"
                                    $FBA_SIZE = $FBA_SIZE + 200
                                          
                               Case $read_ud_zic = "比FBA文件大300M"
                                    $FBA_SIZE = $FBA_SIZE + 300
                                          
                               Case $read_ud_zic = "比FBA文件大500M"
                                    $FBA_SIZE = $FBA_SIZE + 500
                        EndSelect
                        
                        modif_FBA_SIZE($FBA_SIZE);修改UD区空间

      EndSwitch
WEnd

Func USB()
      GUICtrlSetData($lab, "程序没检测到有USB可移动磁盘")
      if not FileExists( "c:\fbinst.exe") Then FileInstall("fbinst.exe", "c:\fbinst.exe", 1)
      $file = @TempDir & '\HD.log'
;      _RunDOS('c:\fbinst.exe--hdlist > ' & $file)
      RunWait('cmd.exe/cc:\fbinst.exe--list >' & $file, "c:\", @SW_HIDE)
      If FileExists($file) Then
                $file_tmp = FileOpen($file, 0)
                While 1
                        $line = FileReadLine($file_tmp)
                        If @error = -1 Then ExitLoop
                        If StringLeft($line, 5) <> "(hd0)" Then
                              If StringLeft($line, 5) = "(hd1)" OR StringRight($line, 1) ="*" Then
                                       
                                        IF StringRight($line, 1) ="*" Then
                                                                                        GUICtrlSetData($Combo1, $line, $line)
                                           GUICtrlSetData($lab, $line)
                                        Else
                                                
                                        GUICtrlSetData($Combo1, $line, $line)
                                        GUICtrlSetData($lab, $line)
                                        EndIf
                              Else
                                        GUICtrlSetData($Combo1, $line)
                              EndIf
                        EndIf
                WEnd
                FileClose($file_tmp)
                FileDelete($file)
      EndIf

EndFunc   ;==>USB


Func modif_FBA_SIZE($a); 修改UD空间
          GUICtrlSetData($Input_SICE , $a)
         
EndFunc   ; 修改UD空间


Func _HoverEffect()
      $aInfo = GUIGetCursorInfo($Form1)
      Switch $aInfo
                Case $Button_fba
                        GUICtrlSetData($Label1, "选择要写入到U盘的FBA文件")
                Case $Input_FBA
                        $tt = GUICtrlRead($Input_FBA)
                        
                        If Not $tt = "" Then
                              GUICtrlSetData($Label1, $tt)
                        Else
                              GUICtrlSetData($Label1, $fba_t_xi)
                        EndIf
                        
                Case $Combo1
                        $tt = GUICtrlRead($Combo1)
                        If Not $tt = "" Then
                              GUICtrlSetData($Label1, $tt)
                        Else
                              GUICtrlSetData($Label1, $hd_t_xi)
                        EndIf
                Case $Checkbox1
                        GUICtrlSetData($Label1, "强制使用CHS模式。这可以用于某些不能自动检测模式的BIOS")
                Case $Button1
                        GUICtrlSetData($Label1, "重新获取磁盘信息")
                Case $Button3
                        GUICtrlSetData($Label1, "选择好USB可移动磁盘和制作模式后可以进行一键制成USB启动盘(不保证100%成功),注意:制作前请先备份U盘原有数据(数据无价,请慎用!)")
                Case $Button2
                        GUICtrlSetData($Label1, "回收隐藏分区空间,格式化为普通的单分区模式,恢复为没有使用fbinst前的模样")
                Case $Button4
                        GUICtrlSetData($Label1, "退出软件")
                Case Else
                        GUICtrlSetData($Label1, "欢迎使用U盘启动盘制作工具")
      EndSwitch
EndFunc   ;==>_HoverEffect

Func Exit_()
      ;Exit
      AdlibUnRegister('_HoverEffect')
      DllClose($SkinDll)
      GUIDelete($Form1)
      Exit
EndFunc   ;==>Exit_

user3000 发表于 2012-1-19 08:19:32

....代码不算短, 但我几乎没看, 因为楼主你的要求是想既可选择自动安装又可选择手动安装吧?
你在运行FBA的代码的前一句加上几句, 应该就能达到目的了:
Local $Select = msgbox(1, '请选择安装方式', '“确定”将自动安装 ' & @CRLF & '‘取消“将手动安装 ', 3)
If $Select = 2 Then Msgbox (0, '', '手动安装')
; Else ...

asdasdasd 发表于 2012-1-19 11:33:14

呵呵,楼主好省事,起来整个GUI啥的不!

seniors 发表于 2012-1-19 13:59:46

这个问题根本没意义
这程序本来就有选择FBA了
你要自动或者手动,根本无意义

mxhk 发表于 2012-1-19 14:54:29

回复 2# user3000
万分感谢,我还得研究研究

都市浪子666 发表于 2012-1-29 02:25:06

呵呵,这个代码当初就没想要有自动这功能,因为有好几项要设置,手动的比较好。

都市浪子666 发表于 2012-1-29 02:34:55

脚本会默认选择DSLZ.FBA和FB.FBA这两个文件(前提是脚本目录下有其中任意一个FBA文件)

epac 发表于 2012-1-30 19:08:50

手动的比较好。

jsgh1983 发表于 2012-1-31 19:13:56

楼上说得对!如果磁盘判断错误资料岂不全毁了!
页: [1]
查看完整版本: AU3U盘安装fba工具加入自动安装FBA