无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 202|回复: 11
打印 上一主题 下一主题

[原创] 启动盘制作工具(原创)芾1.0版源码au3

[复制链接]
跳转到指定楼层
1#
发表于 3 小时前 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动盘制作工具(原创)带1.0源码
网上搜索了一圈暂末找到可用的au3制盘工具源码就发一个出来吧,数据在diy文件夹中,带有ventoy与微pe,多种批量制作等等,当然也可手工置放成其它或自己的pe数据,云盘中是不定期长期更新的肯定会好用些,建议感兴趣的朋友收藏,本工具云盘链接:
https://www.123912.com/s/7ktmjv-Vjbv3?提取码:NYvZ

共享总链接:
https://www.123912.com/s/7ktmjv-Qubv3

1.0基础版源码如下(本基础版仅供新手学习叁考之用,还有很多地方需修改完善,如进度条等等,更多更好请云盘下载试用)
#RequireAdmin
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>

Global $aDisks[0][3] ; [Index, Model, SizeGB]

; 创建主界面
Local $hGUI = GUICreate("制盘工具1.0", 600, 450)
GUICtrlCreateLabel("选择目标磁盘:", 10, 10)
Global $cDiskList = GUICtrlCreateCombo("", 10, 30, 580, 20, $CBS_DROPDOWNLIST)
GUICtrlCreateLabel("分区表类型:", 10, 60)
Global $rMBR = GUICtrlCreateRadio("MBR", 100, 60, 50)
Global $rGPT = GUICtrlCreateRadio("GPT", 160, 60, 50)
GUICtrlSetState($rMBR, $GUI_CHECKED)
GUICtrlCreateLabel("启动分区大小 (GB):", 10, 90)
Global $iBootSize = GUICtrlCreateInput("1", 100, 90, 50, 20)
GUICtrlCreateLabel("第二分区大小 (GB,留空为剩余):", 10, 120)
Global $iPart2Size = GUICtrlCreateInput("", 200, 120, 50, 20)
GUICtrlCreateLabel("第二分区格式:", 10, 150)
Global $cPart2Format = GUICtrlCreateCombo("NTFS", 100, 150, 100, 20, $CBS_DROPDOWNLIST)
GUICtrlSetData($cPart2Format, "FAT32|exFAT", "NTFS")
GUICtrlCreateLabel("第三分区格式:", 10, 180)
Global $cPart3Format = GUICtrlCreateCombo("NTFS", 100, 180, 100, 20, $CBS_DROPDOWNLIST)
GUICtrlSetData($cPart3Format, "FAT32|exFAT", "NTFS")
Global $bStart = GUICtrlCreateButton("开始制作", 250, 350, 100, 30)
Global $idProgress = GUICtrlCreateProgress(10, 400, 580, 20, $PBS_SMOOTH)

; 初始化磁盘列表
RefreshDiskList()
GUISetState(@SW_SHOW)

While 1
    Local $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $bStart
            StartProcess()
    EndSwitch
WEnd

Func RefreshDiskList()
    Local $objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
    Local $colDisks = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive")
    ReDim $aDisks[0][3]
    GUICtrlSetData($cDiskList, "")
   
    For $objDisk In $colDisks
        Local $iSizeGB = Round($objDisk.Size / 1000^3)
        Local $sText = "Disk " & $objDisk.Index & ": " & StringStripWS($objDisk.Model, 2) & " (" & $iSizeGB & " GB)"
        GUICtrlSetData($cDiskList, $sText)
        
        ReDim $aDisks[UBound($aDisks)+1][3]
        $aDisks[UBound($aDisks)-1][0] = $objDisk.Index
        $aDisks[UBound($aDisks)-1][1] = StringStripWS($objDisk.Model, 2)
        $aDisks[UBound($aDisks)-1][2] = $iSizeGB
    Next
EndFunc

Func StartProcess()
    Local $sSelected = GUICtrlRead($cDiskList)
    Local $iDiskIndex = -1
   
    ; 查找选择的磁盘
    For $i = 0 To UBound($aDisks)-1
        If $sSelected = "Disk " & $aDisks[$i][0] & ": " & $aDisks[$i][1] & " (" & $aDisks[$i][2] & " GB)" Then
            $iDiskIndex = $aDisks[$i][0]
            ExitLoop
        EndIf
    Next
    If $iDiskIndex = -1 Then Return MsgBox(16, "错误", "请选择有效磁盘")
   
    ; 获取参数
    Local $sPartType = (GUICtrlRead($rMBR) = $GUI_CHECKED) ? "MBR" : "GPT"
    Local $iBootSizeGB = Number(GUICtrlRead($iBootSize))
    Local $iPart2SizeGB = Number(GUICtrlRead($iPart2Size))
    Local $sPart2Format = GUICtrlRead($cPart2Format)
    Local $sPart3Format = GUICtrlRead($cPart3Format)
   
    ; 生成diskpart脚本
    Local $sScript = "select disk " & $iDiskIndex & @CRLF & _
                    "clean" & @CRLF & _
                    "convert " & $sPartType & @CRLF & _
                    "create partition primary size=" & ($iBootSizeGB * 1024) & @CRLF & _
                    "format fs=fat32 label=U1 quick" & @CRLF & _
                    "assign" & @CRLF
   
    ; 第二分区
    If $iPart2SizeGB > 0 Then
        $sScript &= "create partition primary size=" & ($iPart2SizeGB * 1024) & @CRLF
    Else
        $sScript &= "create partition primary" & @CRLF
    EndIf
    $sScript &= "format fs=" & $sPart2Format & " label=U2 quick" & @CRLF & _
                "assign" & @CRLF
   
    ; 第三分区(如果有剩余空间)
    If $iPart2SizeGB > 0 Then
        $sScript &= "create partition primary" & @CRLF & _
                    "format fs=" & $sPart3Format & " label=U3 quick" & @CRLF & _
                    "assign" & @CRLF
    EndIf
   
    ; 保存并运行脚本
    Local $sTempFile = @TempDir & "\diskpart_script.txt"
    FileDelete($sTempFile)
    FileWrite($sTempFile, $sScript)
    RunWait('diskpart /s "' & $sTempFile & '"', "", @SW_HIDE)
   
    ; 查找分区盘符
    Local $sU1Drive = FindVolume("U1")
    Local $sU2Drive = FindVolume("U2")
    Local $sU3Drive = FindVolume("U3")
   
    ; 复制文件
    UpdateProgress(25, "正在复制启动文件...")
    DirCopy(@ScriptDir & "\diy\esp", $sU1Drive & "\", 1)
   
    UpdateProgress(50, "正在复制数据文件...")
    DirCopy(@ScriptDir & "\diy\data", $sU2Drive & "\", 1)
   
    If $sU3Drive Then
        UpdateProgress(75, "正在复制附加数据...")
        DirCopy(@ScriptDir & "\diy\data3", $sU3Drive & "\", 1)
    EndIf
   
    ; 隐藏启动分区
    RunWait('mountvol ' & StringLeft($sU1Drive, 2) & ' /D', "", @SW_HIDE)
   
    UpdateProgress(100, "操作完成!")
    MsgBox(64, "完成", "制盘成功完成!")
EndFunc

Func FindVolume($sLabel)
    For $i = 1 To 10
        Local $aDrives = DriveGetDrive("ALL")
        If Not @error Then
            For $j = 1 To $aDrives[0]
                If DriveGetLabel($aDrives[$j]) = $sLabel Then
                    Return $aDrives[$j]
                EndIf
            Next
        EndIf
        Sleep(1000)
    Next
    Return SetError(1, 0, "")
EndFunc

Func UpdateProgress($iPercent, $sText)
    GUICtrlSetData($idProgress, $iPercent)
    WinSetTitle($hGUI, "", "制盘工具 - " & $sText)
EndFunc
2#
发表于 2 小时前 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

3#
发表于 2 小时前 | 只看该作者
感谢奉献
回复

使用道具 举报

4#
发表于 2 小时前 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

5#
发表于 2 小时前 | 只看该作者
学习学习 谢楼主分享!
回复

使用道具 举报

6#
发表于 1 小时前 | 只看该作者
支持原创 谢谢分享
回复

使用道具 举报

7#
发表于 1 小时前 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
发表于 1 小时前 | 只看该作者
感谢分享!!!
回复

使用道具 举报

9#
发表于 1 小时前 | 只看该作者
感谢大佬无私分享
回复

使用道具 举报

10#
发表于 1 小时前 | 只看该作者
谢谢分享
回复

使用道具 举报

11#
发表于 21 分钟前 | 只看该作者
支持 原创。。厉害。
回复

使用道具 举报

12#
发表于 7 分钟前 | 只看该作者
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-4-21 14:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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