Passer des paramètres a DOSBOX pour monter et lancer ses jeux.
Posté : dim. 06 août 2017 18:17
Je ne sais pas si c'est votre cas, mais il m'arrive quelquefois de jouer à de vieux jeux DOS abandonware, histoire de retrouver la nostalgie d’antan, mais à chaque fois je devais lancer DOSBOX et taper la ligne de commande qui va bien ou paramétrer le fichier ini DOSBOX pour lancer un jeu; Je trouvais ça fatiguant et ai décidé de créer un petit script qui m'aiderai à passer les bons paramètres pour monter mon jeu dans l'émulateur.
Il fallait pourvoir monter les dossiers, des fichiers images de disquettes ou disque dur, et des fichier iso de cd-rom. J'ai poussé un peu plus loin ma réflexion pour y ajouter un historique des jeux joués pour pouvoir continuer un jeu commencé ou garder la trace des dernier jeux joués.
Pour ceux qui n'en n'auraient jamais entendu parler, je mets un lien vers le site officiel qui vous aidera surement à comprendre à quoi il sert: https://www.dosbox.com/
Donc voilà le script qui ne casse pas des briques, mais effectue les actions qu'on lui demande:
Pour l'image donnée dans fileinstall :
J'espère que ce script sera utile à certains qui comme moi cherchaient une solution pour lancer ses jeux rapidement
Il fallait pourvoir monter les dossiers, des fichiers images de disquettes ou disque dur, et des fichier iso de cd-rom. J'ai poussé un peu plus loin ma réflexion pour y ajouter un historique des jeux joués pour pouvoir continuer un jeu commencé ou garder la trace des dernier jeux joués.
Pour ceux qui n'en n'auraient jamais entendu parler, je mets un lien vers le site officiel qui vous aidera surement à comprendre à quoi il sert: https://www.dosbox.com/
Donc voilà le script qui ne casse pas des briques, mais effectue les actions qu'on lui demande:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#Region ### START Koda GUI section ### Form=
$version="0.4"
$counthist=1
$dosboxhist = FileExists(@TempDir& "\dbxhist.conf"); vérification de l’existence du fichier gérant l'historique des jeux ouverts
if $dosboxhist Then
$tempfile= @TempDir & "\dbxhist.conf"
Else
FileWrite(@TempDir & "\dbxhist.conf","Historique de dosboxmount")
$tempfile= @TempDir & "\dbxhist.conf"
for $i = 1 to 5 Step 1
IniWriteSection($tempfile,"histo" & $i,"label=Vide" & @CRLF & "commande=")
next
iniwritesection($tempfile,"Compteur","valeur=0")
EndIf
$histitem1=IniRead($tempfile,"histo1","label","Vide")
$histitem2=IniRead($tempfile,"histo2","label","Vide")
$histitem3=IniRead($tempfile,"histo3","label","Vide")
$histitem4=IniRead($tempfile,"histo4","label","Vide")
$histitem5=IniRead($tempfile,"histo5","label","Vide")
$Form1 = GUICreate("DosBoxMount !", 194, 159, 192, 124)
$MenuItem1 = GUICtrlCreateMenu("&Monter...")
$MenuItem2 = GUICtrlCreateMenu("&Historique...")
$menuitem3 = GUICtrlCreateMenu("Aide")
$idFileItem1 = GUICtrlCreateMenuItem("une image (*.img...)", $MenuItem1)
$idFileItem2 = GUICtrlCreateMenuItem("un iso", $MenuItem1)
$idFileItem3 = GUICtrlCreateMenuItem("un repertoire", $MenuItem1)
$idFileItem4 = GUICtrlCreateMenuItem("&Quitter", $MenuItem1)
$histfileitem1 = GUICtrlCreateMenuItem($histitem1,$MenuItem2)
$histfileitem2 = GUICtrlCreateMenuItem($histitem2,$MenuItem2)
$histfileitem3 = GUICtrlCreateMenuItem($histitem3,$MenuItem2)
$histfileitem4 = GUICtrlCreateMenuItem($histitem4,$MenuItem2)
$histfileitem5 = GUICtrlCreateMenuItem($histitem5,$MenuItem2)
$aideitem=GUICtrlCreateMenuItem("A propos",$menuitem3)
;~ GUICtrlSetState(-1, $GUI_CHECKED)
GUISetBkColor(0x000080)
fileinstall(".\dosboxmount.jpg", @ScriptDir & "\dosboxmount.jpg"); installation d'une image de fond (qui n'est pas obligatoire)
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\dosboxmount.jpg", 0, 0, 193, 137)
;~ $dosbox = FileExists(@ScriptDir & "\dosbox.exe"); le programme fonctionne avec dosbox, il faut donc le placer dans le même répertoire que celui-ci
if $dosbox Then
$dosbox = @scriptdir & "\dosbox.exe"
Else
msgbox(0,"Erreur","Impossible de trouver Dosbox.exe" & @CRLF & "placer ce fichier au même niveau que Dosbos.exe, Au revoir !")
exit
EndIf
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $idFileItem1
$counthist = IniRead($tempfile,"compteur","valeur",1); un compteur qui permet de gérér un historique des fichiers ouverts
$file2open = FileOpenDialog("Selection du jeu", @ScriptDir, "Images disque et disquettes (*.ima;*.img)", $FD_FILEMUSTEXIST); ouverture des images diskettes ou disque dur (.img, .ima ,ect...)
If @error Then
ContinueLoop
Else
$namehisto = $file2open
$size = FileGetSize($file2open); récupération de la taille du fichier pour determiner comment l'ouvrir
If $size < 2949121 Then ; c'est une image diskette
$file="'" & $file2open & "'"
$file="""imgmount a " & $file & "-t floppy""" ; création de la ligne de commande à envoyer à dosbox
$line = " -c " & $file & " -c a: -c dir"
$counthist = $counthist + 1 ; incrementation du compteur
if $counthist > 5 Then ; l'historique permet de faire tourner les 5 derniers jeux joués
$counthist=1
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist) ; écriture du compteur dans un fichier ini dans %temp%
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
Else
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
EndIf
Else
$file="'" & $file2open & "'" ; si ce n'est pas une image diskette alors on monte un disque dur
$file="""imgmount c " & $file & """"
$line = " -c " & $file & " -c c: -c dir"
$counthist = $counthist + 1
if $counthist > 5 Then
$counthist=1
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
Else
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
EndIf
EndIf
executer($line)
EndIf
Case $idFileItem2
$counthist = IniRead($tempfile,"compteur","valeur",1)
$file2open = FileOpenDialog("Selection du jeu", @ScriptDir, "Images iso (*.iso)", $FD_FILEMUSTEXIST); ouvreture d'une image CD .iso
If @error Then
ContinueLoop
Else
$namehisto = $file2open
$file="'" & $file2open & "'"
$file="""imgmount d " & $file & "-t cdrom"""
$line = " -c " & $file & " -c d:"
$counthist = $counthist + 1
if $counthist > 5 Then
$counthist=1
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
Else
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
EndIf
executer($line)
EndIf
Case $idFileItem3
$counthist = IniRead($tempfile,"compteur","valeur",1)
$file2open = FileSelectFolder("Selection du dossier", @ScriptDir); monter un dossier présent directement dans le disque de l'ordinateur
If @error Then
ContinueLoop
Else
$namehisto = $file2open
$file="'" & $file2open & "'"
$file="""mount c " & $file & """"
$line = " -c " & $file & " -c c:"
$counthist = $counthist + 1
if $counthist > 5 Then
$counthist=1
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
Else
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
EndIf
;~ MsgBox(0,"",$line)
executer($line)
EndIf
case $idFileItem4
Exit
case $histfileitem1 ; gestion de l'historique, surement à améliorer car beaucoup de code redondant
$file = IniRead($tempfile,"histo1","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo1","commande","")
Executer($line)
EndIf
case $histfileitem2
$file = IniRead($tempfile,"histo2","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo2","commande","")
Executer($line)
EndIf
case $histfileitem3
$file = IniRead($tempfile,"histo3","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo3","commande","")
Executer($line)
EndIf
case $histfileitem4
$file = IniRead($tempfile,"histo4","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo4","commande","")
Executer($line)
EndIf
case $histfileitem5
$file = IniRead($tempfile,"histo5","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo5","commande","")
Executer($line)
EndIf
case $aideitem
MsgBox(4096,"Dosbox mount" & " version " & $version,"Concept et devellopement : -Marc GRAZIANI-")
EndSwitch
WEnd
Func executer($file); la fonction qui permet de passer les paramètres a DOSBOX.
ShellExecute($dosbox,$file)
EndFunc ;==>executer
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#Region ### START Koda GUI section ### Form=
$version="0.4"
$counthist=1
$dosboxhist = FileExists(@TempDir& "\dbxhist.conf"); vérification de l’existence du fichier gérant l'historique des jeux ouverts
if $dosboxhist Then
$tempfile= @TempDir & "\dbxhist.conf"
Else
FileWrite(@TempDir & "\dbxhist.conf","Historique de dosboxmount")
$tempfile= @TempDir & "\dbxhist.conf"
for $i = 1 to 5 Step 1
IniWriteSection($tempfile,"histo" & $i,"label=Vide" & @CRLF & "commande=")
next
iniwritesection($tempfile,"Compteur","valeur=0")
EndIf
$histitem1=IniRead($tempfile,"histo1","label","Vide")
$histitem2=IniRead($tempfile,"histo2","label","Vide")
$histitem3=IniRead($tempfile,"histo3","label","Vide")
$histitem4=IniRead($tempfile,"histo4","label","Vide")
$histitem5=IniRead($tempfile,"histo5","label","Vide")
$Form1 = GUICreate("DosBoxMount !", 194, 159, 192, 124)
$MenuItem1 = GUICtrlCreateMenu("&Monter...")
$MenuItem2 = GUICtrlCreateMenu("&Historique...")
$menuitem3 = GUICtrlCreateMenu("Aide")
$idFileItem1 = GUICtrlCreateMenuItem("une image (*.img...)", $MenuItem1)
$idFileItem2 = GUICtrlCreateMenuItem("un iso", $MenuItem1)
$idFileItem3 = GUICtrlCreateMenuItem("un repertoire", $MenuItem1)
$idFileItem4 = GUICtrlCreateMenuItem("&Quitter", $MenuItem1)
$histfileitem1 = GUICtrlCreateMenuItem($histitem1,$MenuItem2)
$histfileitem2 = GUICtrlCreateMenuItem($histitem2,$MenuItem2)
$histfileitem3 = GUICtrlCreateMenuItem($histitem3,$MenuItem2)
$histfileitem4 = GUICtrlCreateMenuItem($histitem4,$MenuItem2)
$histfileitem5 = GUICtrlCreateMenuItem($histitem5,$MenuItem2)
$aideitem=GUICtrlCreateMenuItem("A propos",$menuitem3)
;~ GUICtrlSetState(-1, $GUI_CHECKED)
GUISetBkColor(0x000080)
fileinstall(".\dosboxmount.jpg", @ScriptDir & "\dosboxmount.jpg"); installation d'une image de fond (qui n'est pas obligatoire)
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\dosboxmount.jpg", 0, 0, 193, 137)
;~ $dosbox = FileExists(@ScriptDir & "\dosbox.exe"); le programme fonctionne avec dosbox, il faut donc le placer dans le même répertoire que celui-ci
if $dosbox Then
$dosbox = @scriptdir & "\dosbox.exe"
Else
msgbox(0,"Erreur","Impossible de trouver Dosbox.exe" & @CRLF & "placer ce fichier au même niveau que Dosbos.exe, Au revoir !")
exit
EndIf
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $idFileItem1
$counthist = IniRead($tempfile,"compteur","valeur",1); un compteur qui permet de gérér un historique des fichiers ouverts
$file2open = FileOpenDialog("Selection du jeu", @ScriptDir, "Images disque et disquettes (*.ima;*.img)", $FD_FILEMUSTEXIST); ouverture des images diskettes ou disque dur (.img, .ima ,ect...)
If @error Then
ContinueLoop
Else
$namehisto = $file2open
$size = FileGetSize($file2open); récupération de la taille du fichier pour determiner comment l'ouvrir
If $size < 2949121 Then ; c'est une image diskette
$file="'" & $file2open & "'"
$file="""imgmount a " & $file & "-t floppy""" ; création de la ligne de commande à envoyer à dosbox
$line = " -c " & $file & " -c a: -c dir"
$counthist = $counthist + 1 ; incrementation du compteur
if $counthist > 5 Then ; l'historique permet de faire tourner les 5 derniers jeux joués
$counthist=1
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist) ; écriture du compteur dans un fichier ini dans %temp%
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
Else
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
EndIf
Else
$file="'" & $file2open & "'" ; si ce n'est pas une image diskette alors on monte un disque dur
$file="""imgmount c " & $file & """"
$line = " -c " & $file & " -c c: -c dir"
$counthist = $counthist + 1
if $counthist > 5 Then
$counthist=1
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
Else
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
EndIf
EndIf
executer($line)
EndIf
Case $idFileItem2
$counthist = IniRead($tempfile,"compteur","valeur",1)
$file2open = FileOpenDialog("Selection du jeu", @ScriptDir, "Images iso (*.iso)", $FD_FILEMUSTEXIST); ouvreture d'une image CD .iso
If @error Then
ContinueLoop
Else
$namehisto = $file2open
$file="'" & $file2open & "'"
$file="""imgmount d " & $file & "-t cdrom"""
$line = " -c " & $file & " -c d:"
$counthist = $counthist + 1
if $counthist > 5 Then
$counthist=1
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
Else
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
EndIf
executer($line)
EndIf
Case $idFileItem3
$counthist = IniRead($tempfile,"compteur","valeur",1)
$file2open = FileSelectFolder("Selection du dossier", @ScriptDir); monter un dossier présent directement dans le disque de l'ordinateur
If @error Then
ContinueLoop
Else
$namehisto = $file2open
$file="'" & $file2open & "'"
$file="""mount c " & $file & """"
$line = " -c " & $file & " -c c:"
$counthist = $counthist + 1
if $counthist > 5 Then
$counthist=1
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
Else
IniWriteSection($tempfile,"Compteur","valeur=" & $counthist)
IniWriteSection($tempfile,"histo" & $counthist,"label=" & $namehisto & @CRLF & "commande=" & $line)
EndIf
;~ MsgBox(0,"",$line)
executer($line)
EndIf
case $idFileItem4
Exit
case $histfileitem1 ; gestion de l'historique, surement à améliorer car beaucoup de code redondant
$file = IniRead($tempfile,"histo1","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo1","commande","")
Executer($line)
EndIf
case $histfileitem2
$file = IniRead($tempfile,"histo2","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo2","commande","")
Executer($line)
EndIf
case $histfileitem3
$file = IniRead($tempfile,"histo3","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo3","commande","")
Executer($line)
EndIf
case $histfileitem4
$file = IniRead($tempfile,"histo4","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo4","commande","")
Executer($line)
EndIf
case $histfileitem5
$file = IniRead($tempfile,"histo5","label","")
if $file = "Vide" Then
ContinueLoop
Else
$line=IniRead($tempfile,"histo5","commande","")
Executer($line)
EndIf
case $aideitem
MsgBox(4096,"Dosbox mount" & " version " & $version,"Concept et devellopement : -Marc GRAZIANI-")
EndSwitch
WEnd
Func executer($file); la fonction qui permet de passer les paramètres a DOSBOX.
ShellExecute($dosbox,$file)
EndFunc ;==>executer
J'espère que ce script sera utile à certains qui comme moi cherchaient une solution pour lancer ses jeux rapidement