Install tool by laurent mrejen12th Sep 2006 6:41
|
---|
Summary A tool to install anything in your computer. It can use system variables to let you define your target path. Description A tool to install anything in your computer. It can use system variables to let you define your target path. Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com `Outil d'installation de fichier (copie) version 2 `Décembre 2006 `######################################################### `# Constantes # `######################################################### `Nom du fichier qui possède les noms des éléments à installer INSTALL_FICHIER$="install_fichier.txt" INSTALL_FICNUMBER=1 `Nom du fichier de log INSTALL_LOG$="install_log.txt" INSTALL_LOGNUMBER=2 INSTALL_LOCK$="install_lock.txt" `Constantes des couleurs GRIS = rgb(168,168,168) BLANC = rgb(255,255,255) ORANGE = rgb(250,100,20) BLEU=rgb(10,50,200) NOIR = rgb(0,0,0) `######################################################### `# fin Constantes # `######################################################### `######################################################### `# Programme principal # `######################################################### `On met l'exécution dans une fenêtre sync off `Paramétrage de la fenêtre set window on set window title "Install Tool" set window position 200,200 `set window size 320,240 `On compte le nombre de fichiers à installer iNbrFile=GetNbrLigneInFile(INSTALL_FICHIER$) inbFileTraite=0 `On positionne le rectangle progressBar ProgressBar_X=30 ProgressBar_Y=240 `On vérifie que le programme n'est pas lancé par quelqu'un d'autre if file exist(INSTALL_LOCK$) MsgBox("Une autre personne utilise l'exécutable. Veuillez réesssayer ultérieurement", 16, "Install_Tool") `On sort du programme end endif `Ouverture des fichiers open to read INSTALL_FICNUMBER, INSTALL_FICHIER$ if file exist(INSTALL_LOG$) then delete file INSTALL_LOG$ open to write INSTALL_LOGNUMBER, INSTALL_LOG$ `Chaque ligne représente un élément à copier `Le séparateur est un ";". Le premier champ donne le nom du fichier. Le reste donne le chemin while (file end(INSTALL_FICNUMBER)<>1) `On lit chaque ligne read string INSTALL_FICNUMBER, strLigne$ `On copie le fichier Copie_Fichier(StrLigne$) write string INSTALL_LOGNUMBER ,GetWord(strLigne$,";",1)+" Ok" `On fait progresser la barre inc inbFileTraite ClearBox(BLEU, ProgressBar_X, ProgressBar_Y, inbFileTraite*610/iNbrFile, 30) endwhile close file INSTALL_FICNUMBER close file INSTALL_LOGNUMBER `On supprime le fichier verrrou empêchant la multiactivation delete file INSTALL_LOCK$ `Message de confirmation MsgBox("Les programmes ont bien été installés", 0, "Confirmation d'installation") end `######################################################### `# Fin du programme principal # `######################################################### `######################################################### `# Méthodes # `######################################################### `Copie du fichier source vers le chemin destination Function Copie_Fichier(StrLigne$) `Récupération des variables de la ligne StrNomFicSource$=GetWord(StrLigne$,";", 1) StrNomFicCible$=Decode_CheminCible(strLigne$)+"\"+StrNomFicSource$ `Copie du fichier dans la zone indiquée if file exist(StrNomFicCible$) then delete file StrNomFicCible$ copy file StrNomFicSource$,StrNomFicCible$ Endfunction `Lecture d'une ligne donnant le chemin function Decode_CheminCible(strLigne$) StrChemin$="" InbElt=GetWordCount(StrLigne$,";") for i=2 to InbElt StrElt$=GetWord(StrLigne$,";",i) if left$(StrElt$,1)="@" `Elément spécial. On récupère la valeur à partir des infos système if StrChemin$="" StrChemin$=StrChemin$+GetEnvInfo(right$(StrElt$,len(StrElt$)-1)) else StrChemin$=StrChemin$+"\"+GetEnvInfo(right$(StrElt$,len(StrElt$)-1)) endif else `Elément standard if StrChemin$="" StrChemin$=StrChemin$+StrElt$ else StrChemin$=StrChemin$+"\"+StrElt$ endif endif next i endfunction StrChemin$ `######################################################### `# Fin des méthodes # `######################################################### `######################################################### `# fonctions utiles # `######################################################### `fonction de récupération du nombre de lignes dans un fichier texte function GetNbrLigneInFile(strFileName$) File_ptr=30:Result=0 open to read File_ptr, strFileName$ while (file end(File_ptr)<>1) read string File_ptr, strLigne$ inc Result endwhile close file File_Ptr endfunction Result `fonction du framework `Fonction de récupération des données de connexion function GetEnvInfo(strInfo$) `Création d'un buffer de récupération de l'info lbuf$=space$(255)+chr$(0) strInfo$=StrInfo$+chr$(0) `Chargement de la DLL Kernel32.dll qui renvoie les infos systèmes Load dll "Kernel32.dll", 1 `Load dll "advapi32.dll", 1 `Récupération de l'info Result_Call=call dll(1, "GetEnvironmentVariableA", strInfo$,lbuf$,256) if result_Call=0 result$="Variable non trouvée" else result$=lbuf$ endif `Suppression de la DLL de la mémoire if dll exist(1) then delete dll 1 endfunction result$ `Fonction renvoyant le nombre de mot dans une chaine avec des séparateurs Function GetWordCount(Chaine$, Sep$) NbMots=1 for i=1 to len(Chaine$) if Sep$=mid$(Chaine$, i) then NbMots=NbMots+1 next i EndFunction NbMots `Fonction renvoyant un mot spécifié dans une chaine avec plusieurs mots séparés avec un séparateur `Renvoie -1 si umbe est plus grand que le nombre de mots Function GetWord(Chaine$,Sep$, Number) Mot$="" `Obtention du nombre de mots NbMots=GetWordCount(Chaine$, Sep$) if Number<=NbMots j=1 `On parcours la chaine jusqu'à arriver au premier caractère du mot à prendre for i=1 to len(Chaine$) if mid$(Chaine$,i)=Sep$ j=j+1 `On saute le séparateur i=i+1 EndIf if j>Number then exit if j=Number then Mot$=Mot$+ mid$(Chaine$, i) next i EndIf EndFunction Mot$ `Fonction d'affichage de la boite de dialogue traditionnelle msgbox `MB_OK=0; MB_OKCancel=1; MBAbortRetryIgnore=2; MB_YesNoCancel=3; MB_YesNo=4;MB_RetryCancel=5 `MB_Critical=16; MB_Question=32; MBExclamation=48; MB_Information=64; `MB_DefaultButton1=0; MB_DefaultButton2=256; MB_DefaultButton3=512; `MB_ApplicationModal=0; MB_SystemModal=4096 Function MsgBox(StrMessage$, MB_Button, strTitle$) `Chargement de la dll user32.dll qui contien le contrôle messagebox USER32_DLL=1 load dll "user32.dll", USER32_DLL `Mise en mémoire des boutons à afficher MB_Btn=0x00000000+MB_Button `Appel de la dll pour afficher la boîte result=call dll(USER32_DLL, "MessageBoxExA", 0,strMessage$, strTitle$, MB_Btn) delete dll USER32_DLL endFunction result `Fonction qui efface une zone spécifique de l'écran Function ClearBox(BackColor, x, y, longueur, largeur) set current bitmap 0 ink BackColor,rgb(255,255,255) box X,Y,X+longueur,Y+largeur EndFunction |