TGC Codebase Backup



Install tool by laurent mrejen

12th 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.

You also have some functions to use the kernel32.dll file and a way to make a progress bar



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