Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
[R] j'ai pleins de problèmes à résoudre !
Auteur Message
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
Et oui c'est encore moi !

pour m'entrainer avec autoit j'ai fais le code ci-dessous mais la fonction ProgressCopy je l'ai trouvé sur internet puis modifié à ma sauce. Le probleme c'est que je ne comprend pas encore bien cette fonction donc je n'arrive pas à régler plusieurs problèmes:

1: la progressbar par fichier ne fonctionne pas ou alors très mal.
2: la progressbar générale s'actualise entre chaque fichier mais est-ce possible de l'actualiser tout le temps ?
3: je n'arrive pas à transmettre à la fonction ProgressCopy ma variable $ecrase EDIT: j'ai réussi ce point Smile
4: Comment faire fonctionner le bouton "pause/reprise" pendant la copie d'un fichier ?

Si vous pouvez m'éclairer sur au moins un de ces points je vous en serrai reconnaissant Smile

le code:
Code:

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#Include<String.au3>

;initialisation des variables
$val_input1 = "Dossier source"
$val_input2 = "Dossier de destination"
$val_label5_1 = "0"
$val_label5_2 = "0"
$val_label5_3 = "0"
$ecrase = 0

;déclaration de l'interface graphique
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test d'un systeme de copie", 290, 196, 212, 305)
$Group1 = GUICtrlCreateGroup("controles", 8, 64, 89, 81)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$progressbar1 = GUICtrlCreateProgress(8, 168, 240, 17, $PBS_SMOOTH)
$progressbar2 = GUICtrlCreateProgress(32, 152, 190, 17, $PBS_SMOOTH)
$Label1 = GUICtrlCreateLabel("0%", 250, 170, 30, 14)
$Label2 = GUICtrlCreateLabel("0%", 230, 152, 30, 14)
$Label3 = GUICtrlCreateLabel("fichier en cours", 100, 135, 180, 14)
$Label4 = GUICtrlCreateLabel("dossier en cours", 100, 121, 180, 14)
$Label5 = GUICtrlCreateLabel($val_label5_1 & "/" & $val_label5_2 & ", " & $val_label5_3 & " écrasé(s)" , 100, 107, 180, 14)
$input1 = GUICtrlCreateInput($val_input1, 8, 8, 241, 21)
$input2 = GUICtrlCreateInput($val_input2, 8, 32, 241, 21)
$Button1 = GUICtrlCreateButton("...", 256, 8, 25, 17)
$Button2 = GUICtrlCreateButton("...", 256, 32, 25, 17)
$Button3 = GUICtrlCreateButton("copie", 32, 80, 41, 25)
GUICtrlSetBkColor(-1, 0x009900)
$Button4 = GUICtrlCreateButton("pause/reprise", 16, 112, 73, 25)
GUICtrlSetState($Button4, $GUI_DISABLE)
$Checkbox = GUICtrlCreateCheckbox("remplacer les fichiers existants", 120, 56, 169, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

;gestion des evenements
While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
    Case $Button1
         $val_input1 = FileSelectFolder("Source", "", "*")
         ;$val_input1 = FileOpenDialog("Source", "", "tous (*)")
      If $val_input1 Then GUICtrlSetData($input1, $val_input1)
    Case $Button2
         $val_input2 = FileSelectFolder("Destination", "", 2)
      If $val_input2 Then GUICtrlSetData($input2, $val_input2)
   Case $Button3
      _boutton_copie ()
   Case $Button4
   EndSwitch
WEnd

Func _boutton_copie()
   $val_input1 = GUICtrlRead($input1)
   $val_input2 = GUICtrlRead($input2)
   $tmp_var = 0
      If FileExists($val_input1) = 0 Then
         MsgBox(48, "ERREUR", "la source n'existe pas")
         $tmp_var = 1
      Else
         If FileExists($val_input2) = 0 Then dirCreate($val_input2)
         If FileExists($val_input2) = 0 Then
            MsgBox(48, "ERREUR", "la déstination n'existe pas")
            $tmp_var = 1
         EndIf
      EndIf
   If GUICtrlRead($CheckBox) = 1 Then ; si checkbox coché faire
      $ecrase = 1
   Else
      $ecrase = 0
   EndIf
   if $tmp_var = 0 then ProgressCopy($val_input1, $val_input2)
EndFunc

Func ProgressCopy($current, $destination, $UseMultiColour=0, $attrib = "-R" ,$Run1 = 0 )
   ;FirstTimeRun Get original DirSize and set up Gui
   If $Run1 = 0 Then
      $val_label5_1 = "0"
      $val_label5_2 = "0"
      $val_label5_3 = "0"
      Global $OverallQty, $Overall, $source, $overallpercent, $Progress0Text, $progressbar1, $Progress1Text, $progressbar2, $Progress2Text, $LocalPercent
      If not FileExists ($Destination) then DirCreate ($Destination); This is why it was failing, the dir did not exist
      $source = $current
      If StringRight($current, 1) = '\' Then $current = StringTrimRight($current, 1)
      If StringRight($destination, 1) <> '\' Then $destination = $destination & "\"
      $tosearch = $current
      $Overall = DirGetSize($tosearch, 1)
      $OverallQty = $Overall[1]
      $val_label5_2 = $OverallQty
      $Run1 = 1
      GUICtrlSetState($Button3, $GUI_DISABLE)
      GUICtrlSetState($input1, $GUI_DISABLE)
      GUICtrlSetState($input2, $GUI_DISABLE)
      GUICtrlSetState($Checkbox, $GUI_DISABLE)
      GUICtrlSetState($Button1, $GUI_DISABLE)
      GUICtrlSetState($Button2, $GUI_DISABLE)
      GUICtrlSetState($Button4, $GUI_ENABLE)
   EndIf

   $Size = DirGetSize($current, 3)
   $Qty = $Size[1]
   Local $search = FileFindFirstFile($current & "\*.*")

   While 1
      Dim $file = FileFindNextFile($search)
      If @error Or StringLen($file) < 1 Then ExitLoop
      If Not StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
         $Qty -= 1
         $LocalPercent = 100 - (($Qty / $Size[1]) * 100)
         $OverallQty -= 1
         $val_label5_1 += 1
         $overallpercent = 100 - (($OverallQty / $Overall[1]) * 100)
         $tmp_statut = 0
         If FileExists($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file) = 1 Then
            if $ecrase = 1 then
               $tmp_statut = 1
            EndIf
         EndIf
         GUICtrlSetData($Label3, $file)
         GUICtrlSetData($Label4, $current )
         GUICtrlSetData($Label5, $val_label5_1 & "/" & $val_label5_2 & ", " & $val_label5_3 & " écrasé(s)")
         FileCopy($current & "\" & $file, $destination & StringTrimLeft($current, StringLen($source)) & "\" & $file,$ecrase)
         if $tmp_statut = 1 then
            if @error = 1 then $val_label5_3 += 1
         EndIf
         FileSetAttrib($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file, $attrib)
         GUICtrlSetData($Label1, Int($overallpercent) & "%")
         GUICtrlSetData($Label2, Int($LocalPercent) & "%")
         GUICtrlSetData($progressbar1, $overallpercent)
         GUICtrlSetData($progressbar2, $LocalPercent)
         GUICtrlSetData($Label5, $val_label5_1 & "/" & $val_label5_2 & ", " & $val_label5_3 & " écrasé(s)")
      EndIf
      If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
         DirCreate($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file)
         FileSetAttrib($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file, $attrib)
         ProgressCopy($current & "\" & $file, $destination, $UseMultiColour, $attrib,1)
      EndIf
   WEnd
   FileClose($search)
   If $overallpercent = 100 Then
      GUICtrlSetData($progressbar1, 100)
      GUICtrlSetData($progressbar2, 100)
      GUICtrlSetData($Label3, "fichier en cours")
      GUICtrlSetData($Label4, "Dossier en cours")
      $Run1 = 0
      GUICtrlSetState($Button3, $GUI_ENABLE)
      GUICtrlSetState($input1, $GUI_ENABLE)
      GUICtrlSetState($input2, $GUI_ENABLE)
      GUICtrlSetState($Checkbox, $GUI_ENABLE)
      GUICtrlSetState($Button1, $GUI_ENABLE)
      GUICtrlSetState($Button2, $GUI_ENABLE)
      GUICtrlSetState($Button4, $GUI_DISABLE)
   EndIf
EndFunc ;==>ProgressCopy




Dernière édition par Cαutex le Ven 17 Fév 2012 - 14:04; édité 4 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
Bonjour
il y a des regles dans cette section notamment mettre [?] dans le titre du sujet ;D

Je regarde des que possible ta progressbar pour voir comment il a fait.




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
Bon... j'ai l'impression qu'autoit atteint déjà ses limites!

mes questions 1,2 et 4 sont toutes lié à la même problématique: le fait de pouvoir traiter plusieurs fonctions simultanée.
vous allez me dire que c'est faisable avec une commande comme AdlibRegister; très bien. Mais est-ce qu'il est possible de:
-mettre en pause une commande comme filecopy ou dircopy EN PLEIN MILIEU D'UN FICHIER;
-demander à filecopy ou dircopy d'actualiser une variable contenant la progression toutes les 10ms par exemple (pour pouvoir traiter la progression pendant la copie des fichiers etpas entre la copie des fichiers)

je précise aussi que je ne veux pas utiliser la copie de l'explorer par défaut, je veux que sa soit traité avec autoit (sinon sa serait pas marrant ^^)

EDIT: je confirme, ce n'est pas possible ...



Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
quand tu veux copier un fichier soit tu le copies soit tu annules c'est ce que windows fait d ailleurs , il n'y pas de pause.
Donc mettre une pause ça se trouve faut développer dans un autre langage plus poussé..




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
Laddy a écrit:
Donc mettre une pause ça se trouve faut développer dans un autre langage plus poussé...

Je peux de te dévelloper une petite dll qui utilise une fonction de l'api windows et sa fonction callback si tu veux...

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
@darkbatcher: si sa te dérange pas et si sa me permet de faire ma pause de manière abordable à mon niveau je veux bien Smile



Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
c'est toi le chef Mort de Rire

je te prépare ça de suite Razz




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
ça te va une dialogbox avec une progress bar?




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
justement non ^^, je veux pouvoir intégrer la progressbar dans la fenêtre d'origine.



Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
Ah...

Je suis pas sûr que ça marche de cette façon... mais je vais essayer

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
Re !

je suis un peu en retard mais j'ai pas réussi a interfacer la dll, la fonction de callback et autoit... le problème c'est que tant que la copie n'est pas terminée, l'api appelle régulièrement la fonction callback et c'est seulement à la fin de la copie que la dll rend la main au script...
bien sûr ce serait possible mais il faudrait créer un thread puis ouvrir un sémaphore avec lui pour réussir a ce que les deux s'exécutent simultanément, et ça c'est un peu la barbe Mort de Rire

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
J'ai bien réussi à le faire en batch, donc j'y arriverai peut-être quand je serai plus calé en autoit^^
En tout cas merci d'avoir essayé Okay



Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
hello!

t'as songé a utiliser la façon que détournée que t'as fais en batch ?
tu lance robocy dans un process en ouvrant un pipe et tu récupères le pourcentage, ça doit être fesable ça en autoit non Embarassed




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
oui mais bon c'est un peu lourd à gérer; j’espère juste qu'en autoit il y a un moyen plus simple et un peu moins "bricolé" sans passer par une commande externe déjà.



Répondre en citant
Message [R] j'ai pleins de problèmes à résoudre ! 
Salut,

je reviens 3 ans après ... car j'ai trouvé la solution!

1. En gros j'ai trouvé un udf fonctionnant via une dll permettant de lancer la copie d'un fichier sans interrompre le script puis en demandant régulièrement le statut de la copie (donc permettant d'actualiser une progressbar et de gérer des fonctions comme "pause", "reprise" ou "abandonner")
-Source utilisé-

2. Comme j'aime bien avoir un script autonome j'ai bidouillé le premier UDF pour faire en sorte que le fichier dll soit chargé directement depuis l’exécutable autoit donc sans faire un FileInstal("fichier.dll","destination")
-Source utilisé-



Message [R] j'ai pleins de problèmes à résoudre ! 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch