找回密码
 加入
搜索
查看: 7434|回复: 8

[AU3基础] AU3U盘安装fba工具加入自动安装FBA

  [复制链接]
发表于 2012-1-18 23:59:22 | 显示全部楼层 |阅读模式
下面是都市浪子的代码,这个事是手动添加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  --primary  8m  --chs  --archive  "' & $fba_file & '"', "c:\", "", @SW_HIDE)
                                                        Else
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format  --extended   ' & $size & '   --force  --align  --fat16  --primary  8m  --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  --primary  8m  --chs  --archive  "' & $fba_file & '"')
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format  --extended   ' & $size & '   --force  --align  --fat32  --primary  8m  --chs  --archive  "' & $fba_file & '"', @ScriptDir, @SW_HIDE)
                                                        Else
                                                                ;        MsgBox(0,"--chs",'fbinst.exe   '& $HD & ' format  --extended   ' & $size & '   --force  --align  --fat32  --primary  8m    --archive  "' & $fba_file & '"')
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format  --extended   ' & $size & '   --force  --align  --fat32  --primary  8m         --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  --primary  8m  --chs  --archive  "' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                        Else
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format  --extended   ' & $size & '   --force  --align  --zip  --fat16  --primary  8m         --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  --primary  8m  --chs  --archive  "' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                        Else
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format  --extended   ' & $size & '   --force  --align  --zip  --fat32  --primary  8m         --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  --primary  8m  --chs  --archive  "' & $fba_file & '"', "c:\", "" ,@SW_HIDE)
                                                        Else
                                                                ShellExecuteWait ('c:\fbinst.exe   ', $HD & ' format  --extended   ' & $size & '   --force  --align  --zip  --fat16  --primary  8m         --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  /c  c:\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[4]
                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_
发表于 2012-1-19 08:19:32 | 显示全部楼层
....代码不算短, 但我几乎没看, 因为楼主你的要求是想既可选择自动安装又可选择手动安装吧?
你在运行FBA的代码的前一句加上几句, 应该就能达到目的了:
Local $Select = msgbox(1, '请选择安装方式', '“确定”将自动安装 ' & @CRLF & '‘取消“将手动安装 ', 3)
If $Select = 2 Then Msgbox (0, '', '手动安装')
; Else ... 
发表于 2012-1-19 11:33:14 | 显示全部楼层
呵呵,楼主好省事,起来整个GUI啥的不!
发表于 2012-1-19 13:59:46 | 显示全部楼层
这个问题根本没意义
这程序本来就有选择FBA了
你要自动或者手动,根本无意义
 楼主| 发表于 2012-1-19 14:54:29 | 显示全部楼层
回复 2# user3000
万分感谢,我还得研究研究
发表于 2012-1-29 02:25:06 | 显示全部楼层
呵呵,这个代码当初就没想要有自动这功能,因为有好几项要设置,手动的比较好。
发表于 2012-1-29 02:34:55 | 显示全部楼层
脚本会默认选择DSLZ.FBA和FB.FBA这两个文件(前提是脚本目录下有其中任意一个FBA文件)
发表于 2012-1-30 19:08:50 | 显示全部楼层
手动的比较好。
发表于 2012-1-31 19:13:56 | 显示全部楼层
楼上说得对!如果磁盘判断错误资料岂不全毁了!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-25 20:24 , Processed in 0.079545 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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