[..] Script autour de la manipulation de décompression

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
mry0y0
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 05 août 2009 15:44
Status : Hors ligne

[..] Script autour de la manipulation de décompression

#1

Message par mry0y0 »

Bonjour à tous,

Je découvre votre forum avec grand intérêt car un ami m'a parlé d'Auto-It pour la création de scripts plus intéressants qu'en .bat.

Mon souhait :
Je souhaiterai construire un script qui permettrait de choisir un fichier .rar, d'ensuite choisir son répertoire de destination et ensuite de lancer la décompression du fichier (sachant que la plupart du temps, on choisit le rar, car il va appeler les r01, r02, ... tout seul après).

J'ai déjà commencé par la partie graphique en me servant du super tuto de Tlem mais maintenant que la partie compliquée arrive, je me retrouve bloqué"

Voici le bout de code que j'ai déjà "fait"/compilé de différents tutoriels :
► Afficher le texte
Merci par avance pour votre aide !
Modifié en dernier par mry0y0 le mer. 05 août 2009 18:59, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Script autour de la manipulation de winrar/unrar

#2

Message par Tlem »

Dans votre code, vous indiquez pour $Logo un chemin complet vers une image de votre disque dur.
Lors de la compilation et du lancement sur une autre machine, cette image ne sera pas existante et donc ... pas d'image.
Utilisez pour commencer FileInstall en indiquant comme chemin le dossier temporaire. Puis dans votre GUI, indiquez celui-ci.

Code : Tout sélectionner

#AutoIt3Wrapper_Res_LegalCopyright=Copyright (C) 2009-2012 mry0y0 Software
Heuuuu nous ne sommes pas encore en 2012 que je sache.

Code : Tout sélectionner

#AutoIt3Wrapper_UseUpx=y
Cette option à pour facheuse habitude de déclencher les antivirus (bien que parfois avec ou sans ... :cry: ).

Au lieu de faire 3 fois GuiCtrlSetFont, vous pouvez utiliser une seule fois GUISetFont (si le reste du code doit être affiché dans la même police).

Pour la sélection d'un répertoire, utilisez plutôt FileSelectFolder au lieu de FileOpenDialog

Pour la suite de votre code, puisque vous avez créé le bouton $unrarbutton, créez le Case qui lui est associé et à la suite, ou dans une fonction, écrivez le code qui va utiliser le nom du fichier rar à extraire ($File) et le chemin vers lequel extraire ce fichier.
Il vous suffira de scripter la commande avec la version ligne de commande de Winrar.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
mry0y0
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 05 août 2009 15:44
Status : Hors ligne

Re: [..] Script autour de la manipulation de winrar/unrar

#3

Message par mry0y0 »

Merci bcp pour les informations et surtout votre tutoriel.
C'est justement sur la fonction et les commandes de winrar que réside mon problème. N'étant pas du tout informaticien, c'est sur cette partie que je patine sévèrement et je ne trouve rien sur le net ... d'où mon appel à l'aide :?

existe-t'il une librairie dans autoit pour la décompression de fichiers ?
sinon en ligne de commande j'ai $File pour le fichier sélectionné et $Folder pour le répertoire sélectionné, j'imagine qu'ensuite cela devrait donner en ligne de commande kke chose comme unrar -$Folder $File (enfin dans l'esprit)
Au lieu de faire 3 fois GuiCtrlSetFont, vous pouvez utiliser une seule fois GUISetFont (si le reste du code doit être affiché dans la même police).
Où doit-on le déclarer qu'une seule fois ?

Help :?

Merci encore
mry0y0
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 05 août 2009 15:44
Status : Hors ligne

Re: [..] Script autour de la manipulation de décompression

#4

Message par mry0y0 »

Tlem, j'ai retrouvé un te vos scripts utilisant 7za.exe et son intégration avec Auto-IT.
Penses-tu qu'il pourrait répondre à mon problème sachant que j'ai maintenant les variables File et Folder pour le lancer ?

j'ai repris votre l'idée
un fichier 7zaExe.au3 dans le rep
le fichier 7za.exe
le script que j'essaye de faire.au3

et j'ai ajouté cela :

Code : Tout sélectionner

#include <7zaExe.au3>

Code : Tout sélectionner

        Case $filebutton
            $File = FileOpenDialog("Sélectionner le fichier à décompresser ...", @HomeDrive, "Rar files (*.rar)", 1)
            If @error Then
                MsgBox(4096, "", "Vous n'avez pas sélectionné de fichier")
            EndIf

        Case $repbutton
            $Folder = FileSelectFolder("Choisir le répertoire de destination ...", @HomeDrive, "", 1)
            If @error Then
                MsgBox(4096, "", "Vous n'avez pas sélectionné de dossier")
            EndIf
        Case $unrarbutton
        $7zaPath = @ScriptDir & "\7za.exe"
        $Res = _Extract7zaExe($7zaPath, $File, $Folder, 1)
        If $Res = 0 Then MsgBox(64,"Erreur", "Erreur lors de l'extraction de l'archive") 
bien entendu, ça ne réagit pas vraiment comme je l'aurai espéré :?

autre question, ça serait plutôt pas mal d'ajouter une Progressbar afin de voir que ça agit ... y-en a-t'il une de simple à insérer ?
Modifié en dernier par mry0y0 le mer. 05 août 2009 19:28, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Script autour de la manipulation de winrar/unrar

#5

Message par Tlem »

Pour Winrar, vous avez plusieurs options disponibles.

1 - Vous téléchargez la version Windows de Unrar et vous la scriptez (Simple voir ici).

2 - Vous téléchargez la version DLL de Unrar et il vous suffira d'aller voir ici comment l'utiliser.

Pour chacune de ces solutions, vous devrez inclure le programme ou la DLL dans votre exécutable pour le lancer ensuite à partir du dossier temporaire (FileInstall). Aucun problème pour la licence puisque Unrar est totalement gratuit.
mry0y0 a écrit :Où doit-on le déclarer qu'une seule fois ?
Juste après la création de la GUI (GUICreate).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
mry0y0
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 05 août 2009 15:44
Status : Hors ligne

Re: [..] Script autour de la manipulation de décompression

#6

Message par mry0y0 »

Merci pour les informations.
1 - Vous téléchargez la version Windows de Unrar et vous la scriptez (Simple voir ici).
le lien que vous m'avez donné semble KO, je penche plus pour cette solution car l'autre option est tellement complexe que je ne m'y retrouve pas du tout :(

PS : je tiens à préciser que je n'y connais vraiment rien :oops:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Script autour de la manipulation de décompression

#7

Message par Tlem »

mry0y0 a écrit :PS : je tiens à préciser que je n'y connais vraiment rien :oops:
Si vous êtes ici, c'est pour apprendre non ?

Je viens de tester les quatre liens de mon messages et ils fonctionnent tous. :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
mry0y0
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 05 août 2009 15:44
Status : Hors ligne

Re: [..] Script autour de la manipulation de décompression

#8

Message par mry0y0 »

mry0y0 a écrit
PS : je tiens à préciser que je n'y connais vraiment rien Si vous êtes ici, c'est pour apprendre non ?
Je confirme néanmoins, c'est pas facile tout de même :wink: et je vous avouerai que je patauge quand même, même avec les liens que vous me communiquez :oops:
Je viens de tester les quatre liens de mon messages et ils fonctionnent tous.
lorsque je clique, voici ce que j'obtiens :
An Error Occurred
Sorry, an error occurred. If you are unsure on how to use a feature, or don't know why you got this error message, try looking through the help files for more information.
[#103139] You do not have permission to view this forum.
Et pourtant, je me suis enregistré pensant que ça venait de là, mais apparement, il faut plus pour accéder à la page ...

Question subsidiaire : de quelle manière peut-on appeler un fichier.au3 lors d'un clic sur un bouton ? (genre Run ou autre) ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Script autour de la manipulation de décompression

#9

Message par Tlem »

Pour votre problème d'accès au forum Anglais, attendez que votre compte soit actif, ou validez le.

Pour le reste, une lecture de quelques sujets de la section tutoriel s'impose.
Avant de poser toutes sorte de questions dont les réponses sont à votre portée, prenez le temps de lire un peut le forum et l'aide d'AutoIt.

Pour la recherche sur le forum, voyez ma signature.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
mry0y0
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 05 août 2009 15:44
Status : Hors ligne

Re: [..] Script autour de la manipulation de décompression

#10

Message par mry0y0 »

Rebonjour,

Merci pour les pistes, j'ai trouvé quelque chose qui me semble bien et je l'ai inséré dans le code. Cela fonctionne maintenant, je dois gérer les erreurs. En gros, lors que je ne respecte pas le processus, je voudrais pouvoir revenir à la fenetre du script sans que celui-ci se ferme automatiquement.
voici le code :

Code : Tout sélectionner

Case $UnrarButton
            ;Gestion de la fonction Unrar
            HotKeySet("{Esc}", "_CancelUnpack")

            ;Creates a user-defined DLL Callback function to process Unrar events
            $hUnRAR_CallBack = DllCallbackRegister("_UnRARProc", "int", "uint;int;int;int")

            $ArchiveFile = FileOpenDialog("Choisissez votre fichier à décompresser ...", @MyDocumentsDir, "Archives (*.rar)")

            $OutputFolder = FileSelectFolder("Sélectionnez votre répertoire de destination ...", "", 1)
            If $OutputFolder = "" Then Exit

            ;Retrieve comment from archive file
            $comment = _Rar_GetComment($ArchiveFile)
            ConsoleWrite("!> Archive comment: " & $comment & @LF)

            ;Open RAR archive and allocate memory structures
            $hArchive = _RAR_OpenArchive($ArchiveFile)
            If @error Then
                MsgBox(16, @error, "Erreur lors de l'ouverture du fichier")
                Exit
            EndIf

            ;Test the current archive file
            _Rar_TestArchive($hArchive)
            If @error Then
                MsgBox(16, "UnRAR", "Erreur lors du test de l'archive")
                Exit
            Else
                MsgBox(64, "UnRAR", "Test de l'archive réussi")
            EndIf

            ;Close RAR archive and release allocated memory
            _RAR_CloseArchive($hArchive)

            ;Set a password to decrypt files
            ;_RAR_SetPassword($hArchive, "MyPassword")

            ;Returns an integer value denoting UnRAR.dll API version
            ;_RAR_GetDllVersion()

            $hArchive = _RAR_OpenArchive($ArchiveFile)
            If @error Then
                MsgBox(16, "UnRAR", "Erreur lors de l'ouverture du fichier")
                Exit
            EndIf

            ;Set a user-defined callback function to process Unrar events
            _RAR_SetCallback($hArchive, $hUnRAR_CallBack)

            ;Read header of file in archive, performs action and moves the current position in the archive to the next file
            ;Also extract or test the current file from the archive
            _Rar_UnpackArchive($hArchive, $OutputFolder)
            If @error Then
                MsgBox(16, "UnRAR", "Erreur lors de la décompression du fichier")
                Exit
            EndIf

            If $Cancel = True Then
                MsgBox(64, "UnRAR", "Décompression annulée")
            Else
                MsgBox(64, "Done", "Fichier décompressé")
            EndIf

            DllCallbackFree($hUnRAR_CallBack)
 
J'ai tenté d'interrompre en sortant de la boucle en mettant ExitLoop à la plac de Exit, mais ça ne change rien et si j'appuie sur Annuler, ça ferme tout de même le script. Que pourrais-je utiliser ?

Merci par avance
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Script autour de la manipulation de décompression

#11

Message par Tlem »

Vous pouvez essayer la commande Return.

Sinon, le mieux serait sans doute de traiter dans le Case $UnrarButton la récupération du nom de l'archive et le chemin d'extraction ensuite et seulement si tout est ok, lancez une fonction de décompression de l'archive.
La fonction devrait ressembler à ceci :

Code : Tout sélectionner

Func ExtractRar($sFichier, $sChemin)
    ; Placez ici le code de l'extraction et utilisez la commande
    ; Return pour sortir prématurément.
    ; Utilisez les variables $sFichier et $sChemin en lieu et place de $ArchiveFile et $OutputFolder.
EndFunc
Vous n'avez plus qu'à rajouter l'appel de cette fonction à la suite du code de Case $UnrarButton.
Cela donnera un appel de ce type :

Code : Tout sélectionner

Func ExtractRar($ArchiveFile, $OutputFolder)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre