je pense avoir pensé à tout ou presque il me reste la msgbox Annuler à terminer mais avant d'aller plus loin j'aimerai vos conseils sur le codage.
C'est mon premier programme qui m'a appris :
à me battre avec les guillemets dans le commande RunWait, Run.
Lire une clé du registre
Trier les résultats d'un fichier txt.
Créer des fonctions
Grâce à vous et votre patience.
CloneVDIManager est pour cloner ses machines virtuelles avec la possibilité de créer une VM rapidement en passant par un GUI (Bouton Créer)

► Afficher le texteAutres captures

Virtualbox utilisé : v 3.1.6
Merci d'avance en espérant que vous ne soyez pas trop sévère.
► Afficher le texteCode CloneVDIManager
Code : Tout sélectionner
#include <Array.au3>
#include <GUIConstantsEx.au3>
#cs
CloneVDI Manager v1.1 By Laddy
Cheffe de Projet : Laddy
Command Line VboxManager :http://www.virtualbox.org/manual/ch08.html
http://www.virtualbox.org/manual/ch08.html#vboxmanage-showvminfo
http://www.virtualbox.org/manual/ch08.html#vboxmanage-clonevdi
http://www.virtualbox.org/manual/ch08.html#id494539 (vboxmanage-createvm)
http://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm
http://www.virtualbox.org/manual/ch08.html#id508609 (VBoxManage.exe storageattach)
http://www.virtualbox.org/manual/ch08.html#vboxmanage-storagectl
Merci à l'ensemble des membres et équipes de Autoscript.fr The Forum pour leurs patiences et explications.
#ce
Opt("GUIOnEventMode", 1)
Global $String1, $String2, $String3, $IniDestination, $IniSource, $ClonageHD, $Annuler, $Progess1, $Creer, $BrowseDestination, $BrowseSource, $Cloner, $GuiCreateVM
Global $NameNewVM, $PathDir, $MemoryRAM, $VDI, $OS, $OSarch, $ListOsType, $OsType
Local $Progress1, $pid, $pourcent, $total
#Region ### GUI SECTION CLONEVDIMANAGER ### CloneVDIManager.kxf
$GuiCloneVDI = GUICreate("CloneVDIManager", 588, 356, 506, 332)
GUISetOnEvent($GUI_EVENT_CLOSE, "Sortie")
$Group1 = GUICtrlCreateGroup("Fichiers", 16, 16, 553, 113)
$Source = GUICtrlCreateLabel("Source :", 32, 48, 44, 17)
$Destination = GUICtrlCreateLabel("Destination : ", 32, 88, 66, 17)
$SourceFile = GUICtrlCreateInput("", 120, 48, 369, 21)
$DestinationFile = GUICtrlCreateInput("", 120, 88, 369, 21)
$BrowseSource = GUICtrlCreateButton("Parcourir...", 496, 48, 65, 25)
GUICtrlSetOnEvent($BrowseSource, "BrowseSrc")
$BrowseDestination = GUICtrlCreateButton("Parcourir...", 496, 88, 67, 25)
GUICtrlSetOnEvent($BrowseDestination, "BrowseDst")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Informations Source", 16, 136, 553, 105)
$Label4 = GUICtrlCreateLabel("UUID", 72, 160, 31, 17)
$UUID = GUICtrlCreateInput("", 128, 160, 361, 21)
$Label5 = GUICtrlCreateLabel("Taille du disque", 24, 200, 78, 17)
$SizeHD = GUICtrlCreateInput("", 128, 192, 161, 21)
$Label6 = GUICtrlCreateLabel("Accessibilite", 304, 200, 62, 17)
$Valid = GUICtrlCreateInput("", 376, 192, 177, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("A propos", 16, 256, 553, 49)
$Infos = GUICtrlCreateLabel("CloneVDIManager - Laddy -Cheffe de projet", 178, 271, 210, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Creer = GUICtrlCreateButton("Creer", 24, 312, 75, 25)
GUICtrlSetOnEvent($Creer, "CreateVM")
$Cloner = GUICtrlCreateButton("Cloner", 400, 312, 89, 25)
GUICtrlSetOnEvent($Cloner, "ClonageHD")
$Quitter = GUICtrlCreateButton("Quitter", 496, 312, 75, 25)
GUICtrlSetOnEvent($Quitter, "Sortie")
GUISetState(@SW_SHOW, $GuiCloneVDI)
#EndRegion ### GUI SECTION CLONEVDIMANAGER ### CloneVDIManager.kxf
;Variable
If @OSArch = "X64" Then $OSarch = "64"
;If StringRight($vbox_path, 1) = "\" Then $vbox_path = StringRegExpReplace($vbox_path, "\\$", "")
If RegRead("HKEY_LOCAL_MACHINE" & $OSarch & "\SOFTWARE\Oracle\VirtualBox", "InstallDir") Then
$PathVirtualBox = RegRead("HKEY_LOCAL_MACHINE" & $OSarch & "\SOFTWARE\Oracle\VirtualBox", "InstallDir")
ElseIf RegRead("HKEY_LOCAL_MACHINE" & $OSarch & "\SOFTWARE\Sun\VirtualBox", "InstallDir") Then
$PathVirtualBox = RegRead("HKEY_LOCAL_MACHINE" & $OSarch & "\SOFTWARE\Sun\VirtualBox", "InstallDir")
ElseIf RegRead("HKEY_LOCAL_MACHINE" & $OSarch & "\SOFTWARE\Sun\xVM VirtualBox", "InstallDir") Then
$PathVirtualBox = RegRead("HKEY_LOCAL_MACHINE" & $OSarch & "\SOFTWARE\Sun\xVM VirtualBox", "InstallDir")
Else
MsgBox(16, "VirtualBox", "Erreur d'installation ou le logiciel n'est pas installé sur ce poste.")
Exit
EndIf
Do
$nMsg = GUIGetMsg()
Switch $nMsg
Case $BrowseSource
BrowseSrc()
Case $BrowseDestination
BrowseDst()
Case $Creer
CreateVM()
Case $Cloner
ClonageHD()
Case $Quitter
Exit
EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
Func CreateVM()
;création d'un tableur 1D contenant les types d'OS de VirtualBox.
Global $OsType[62] = ["Other", "Windows31", "Windows95", "Windows98", "WindowsMe", _
"WindowsNT4", "WindowsNT", "Windows2000", "Windows2003", "Windows2003_64", "Windows2008", "Windows2008_64", _
"WindowsXP", "WindowsXP_64", "WindowsVista", "WindowsVista_64", "Windows7", "Windows7_64", _
"Linux", "Linux22", "Linux24", "Linux24_64", "Linux26", "Linux26_64", "ArchLinux", "ArchLinux_64", "Debian", "Debian_64", "OpenSUSE", "OpenSUSE_64", _
"Fedora", "Fedora_64", "Gentoo", "Gentoo_64", "Mandriva", "Mandriva_64", "RedHat", "RedHat_64", "Turbolinux", "Ubuntu", "Ubuntu_64", _
"Xandros", "Xandros_64", "Solaris", "Solaris_64", "OpenSolaris", "OpenSolaris_64", _
"FreeBSD", "FreeBSD_64", "OpenBSD", "OpenBSD_64", "NetBSD", "NetBSD_64", _
"OS2Warp3", "OS2Warp4", "OS2Warp45", "OS2eCS", "OS2", _
"DOS", "Netware", "L4", "QNX"]
;ID créer une Gui
#Region ### START Koda GUI section ### Form=D:\Téléchargements\koda_1.7.3.0\Forms\GuiCreateVM.kxf
Global $GuiCreateVM = GUICreate("GuiCreateVM", 505, 213, 190, 121)
Global $PathDir = GUICtrlCreateInput("PathDir", 96, 56, 385, 21)
Global $VDI = GUICtrlCreateInput("VDI", 96, 96, 385, 21)
Global $Go = GUICtrlCreateButton("Go", 328, 176, 75, 25)
GUICtrlSetOnEvent($Go, "GoCreate")
Global $Label1 = GUICtrlCreateLabel("Dossier :", 24, 56, 45, 17)
Global $Label2 = GUICtrlCreateLabel("Image vdi", 24, 96, 54, 17)
Global $MemoryRAM = GUICtrlCreateInput("MemoryRAM", 96, 136, 105, 21)
Global $Memoire = GUICtrlCreateLabel("Memoire RAM :", 8, 144, 77, 17)
Global $NameNewVM = GUICtrlCreateInput("NameVM", 96, 16, 121, 21)
Global $Label3 = GUICtrlCreateLabel("Nom de la VM : ", 8, 16, 80, 17)
Global $Label5 = GUICtrlCreateLabel("OS Type :", 272, 16, 52, 17)
Global $ListOsType = GUICtrlCreateCombo("", 328, 16, 145, 25)
Global $Fermer = GUICtrlCreateButton("Fermer", 416, 176, 75, 25)
GUICtrlSetOnEvent($Fermer, "Fermer")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
[color=#408000]Global $string = ""
For $i In $OsType
$string &= $i & "|"
Next
$string = StringTrimRight($string, 1) ; c'est pour enlever le dernier |
GUICtrlSetData($ListOsType, $string)[/color]
;For $i In $OsType
; GUICtrlSetData($ListOsType, _ArrayToString($OsType, "|")) ;lecture du tableau
;Next
EndFunc ;==>CreateVM
Func GoCreate()
$OS = GUICtrlRead($ListOsType)
;note OStype est accessible via vboxmanage list Ostypes
#cs
ID: WindowsXP
Description: Windows XP
ID: Windows7
Description: Windows 7
#ce
;command de création Nom de la VM - createvm, modifyvm, storagectl, storageattach
ProgressOn("Custom VirtualBox", "Création de " & GUICtrlRead($NameNewVM)) ;création d'une progressBar.
ProgressSet("20")
RunWait('"' & $PathVirtualBox & 'VBoxManage.exe" createvm --name "' & GUICtrlRead($NameNewVM) & '" --ostype "' & $OS & '" --basefolder "' & GUICtrlRead($PathDir) & '" --register', $PathVirtualBox, @SW_HIDE) ;VM bien crée dans le dossier indiqué
ProgressSet("40")
RunWait('"' & $PathVirtualBox & 'VBoxManage.exe" modifyvm "' & GUICtrlRead($NameNewVM) & '" --memory ' & GUICtrlRead($MemoryRAM), $PathVirtualBox, @SW_HIDE) ; memoire prise en compte
ProgressSet("60")
RunWait('"' & $PathVirtualBox & 'VBoxManage.exe" storagectl "' & GUICtrlRead($NameNewVM) & '" --name "IDE Controller" --add ide --controller PIIX4', $PathVirtualBox, @SW_HIDE) ; création du Controlleur IDE
ProgressSet("80")
RunWait('"' & $PathVirtualBox & 'VBoxManage.exe" storageattach "' & GUICtrlRead($NameNewVM) & '" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium "' & GUICtrlRead($VDI) & '"', $PathVirtualBox, @SW_HIDE) ;vdi attachée
ProgressSet(100, "Fini")
Sleep(500)
ProgressOff()
KillGui3() ; fermer la Gui.
EndFunc ;==>GoCreate
Func BrowseSrc()
Local $ListInfo = "InfoSourceVDI.txt"
Local $message = "Selectionne la source de ton fichier VDI."
Local $var = FileOpenDialog($message, @DesktopDir & "\", "Fichiers VirtualBox (*.vdi;*.vmdk;*.vbox)", 1)
GUICtrlSetData($SourceFile, $var)
IniWrite(@ScriptDir & "\CloneVDIinfo.ini", "parametres", "Source", GUICtrlRead($SourceFile))
$IniSource = IniRead(@ScriptDir & "\CloneVDIinfo.ini", "parametres", "Source", "NotFound")
FileChangeDir(@ScriptDir)
RunWait(@ComSpec & ' /c "' & $PathVirtualBox & 'VBoxManage.exe"' & " showhdinfo " & $IniSource & " > " & $ListInfo, "", @SW_HIDE)
$file = FileOpen("InfoSourceVDI.txt", 0)
While 1
$Line = FileReadLine($file)
If @error Then ExitLoop
If StringLeft($Line, 5) = "UUID:" Then $String1 = StringTrimLeft($Line, 6)
If StringLeft($Line, 11) = "Accessible:" Then $String2 = StringTrimLeft($Line, 22)
If StringLeft($Line, 13) = "Logical size:" Then $String3 = StringTrimLeft($Line, 14)
WEnd
FileClose($file)
GUICtrlSetData($UUID, $String1)
If StringUpper($String2) = "yes" Then
GUICtrlSetColor($Valid, 0x00ff00) ; green VM Ok
GUICtrlSetData($Valid, $String2)
Else
GUICtrlSetColor($Valid, 0xff0000) ; Red VM Non accessible
GUICtrlSetData($Valid, $String2)
EndIf
GUICtrlSetData($SizeHD, Mo_To_Go($String3) & " Go") ; lecture et conversion des Mo en Go
EndFunc ;==>BrowseSrc
Func BrowseDst()
Local $message = "Sélectionne la destination de ton fichier VDI."
Local $var = FileOpenDialog($message, @DesktopDir & "\", "Fichiers (*.vdi;*.vbox)")
GUICtrlSetData($DestinationFile, $var)
IniWrite(@DesktopDir & "\CloneVDIinfo.ini", "parametres", "Destination", GUICtrlRead($DestinationFile))
$IniDestination = IniRead(@ScriptDir & "\CloneVDIinfo.ini", "parametres", "Destination", "NotFound")
EndFunc ;==>BrowseDst
Func Mo_To_Go($mo, $decimal = 3)
Return Round($mo / 1024, $decimal)
EndFunc ;==>Mo_To_Go
Func ClonageHD()
#Region ### GUI Clonage ### Form=D:\Téléchargements\koda_1.7.3.0\Forms\ClonageHardDisk.kxf
$ClonageHD = GUICreate("Clonage Disque Virtuel", 306, 135, 192, 124)
$Group1 = GUICtrlCreateGroup("En Cours", 8, 8, 289, 73)
$Progress1 = GUICtrlCreateProgress(16, 40, 265, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Annuler = GUICtrlCreateButton("Annuler", 208, 96, 81, 25)
GUICtrlSetOnEvent($Annuler, "Annuler")
GUISetState(@SW_SHOW, $ClonageHD)
#EndRegion ### GUI Clonage ### Form=D:\Téléchargements\koda_1.7.3.0\Forms\ClonageHardDisk.kxf
#Region ### Action de clonage
$IniSource = IniRead(@ScriptDir & "\CloneVDIinfo.ini", "parametres", "Source", "NotFound")
$IniDestination = IniRead(@ScriptDir & "\CloneVDIinfo.ini", "parametres", "Destination", "NotFound")
$pid = Run('"' & $PathVirtualBox & 'VBoxManage.exe clonehd "' & $IniSource & '" "' & $IniDestination & '"', $PathVirtualBox, @SW_HIDE)
$total = FileGetSize($IniSource) ; ici il faudra mettre la taille du fichier source qui se fera clôner
AdlibRegister("Update_progress", 1000)
#EndRegion ### Action de clonage
EndFunc ;==>ClonageHD
Func Annuler()
$Choix = MsgBox(2, "Annuler par l'utilisateur", "Annuler ?")
Switch $Choix
Case 3
ProcessClose($pid)
ProcessClose("vboxSVC.exe")
KillGui2()
Case 4
Case 5
EndSwitch
EndFunc ;==>Annuler
Func KillGui2()
GUIDelete($ClonageHD)
EndFunc ;==>KillGui2
Func KillGui3()
GUIDelete($GuiCreateVM)
EndFunc ;==>KillGui3
Func Fermer() ;Bouton fermer Gui3 - CreateVM()
GUIDelete($GuiCreateVM)
EndFunc ;==>Fermer
Func Sortie()
If @GUI_WinHandle = $GuiCloneVDI Then
Exit
Else
GUIDelete(@GUI_WinHandle)
EndIf
EndFunc ;==>Sortie
#Region ### fonction pour la progressbar
Func Update_progress()
$pourcent = Int(FileGetSize($IniDestination) / $total * 100) ; calcul de la taille Destination en fonction de la source
ConsoleWrite($pourcent & @CRLF)
GUICtrlSetData($Progress1, $pourcent)
If Not ProcessExists($pid) Then
GUICtrlSetData($Progress1, 100)
MsgBox("0", "Terminer", "Clonage Terminé")
AdlibUnRegister("Update_progress")
KillGui2()
EndIf
EndFunc ;==>Update_progress
#EndRegion ### fonction pour la progressbar



