Passer des paramètres a DOSBOX pour monter et lancer ses jeux.

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
marcgforce
Niveau 3
Niveau 3
Messages : 32
Enregistré le : lun. 07 mars 2016 07:20
Status : Hors ligne

Passer des paramètres a DOSBOX pour monter et lancer ses jeux.

#1

Message par marcgforce » dim. 06 août 2017 17: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:
#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
Pour l'image donnée dans fileinstall : Image

J'espère que ce script sera utile à certains qui comme moi cherchaient une solution pour lancer ses jeux rapidement

wiwileborne
Niveau 1
Niveau 1
Messages : 4
Enregistré le : lun. 12 déc. 2016 13:44
Status : Hors ligne

Re: Passer des paramètres a DOSBOX pour monter et lancer ses jeux.

#2

Message par wiwileborne » dim. 06 août 2017 19:18

Bonjour j'ai remarquer une petite erreur ligne 44 je crois pour moi donc j'ai remplacer la ligne par

if FileExists(@ScriptDir & "\dosbox.exe") Then

marcgforce
Niveau 3
Niveau 3
Messages : 32
Enregistré le : lun. 07 mars 2016 07:20
Status : Hors ligne

Re: Passer des paramètres a DOSBOX pour monter et lancer ses jeux.

#3

Message par marcgforce » lun. 07 août 2017 07:26

Bonjour, effectivement, la ligne j'avais placé la ligne au dessus en commentaire et ai oublié de corriger ce defaut, merci beaucoup :)

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité