cs_Angus59
Messages postés12Date d'inscriptionjeudi 8 avril 2004StatutMembreDernière intervention 8 avril 2005
-
22 mars 2005 à 22:00
cs_Angus59
Messages postés12Date d'inscriptionjeudi 8 avril 2004StatutMembreDernière intervention 8 avril 2005
-
23 mars 2005 à 11:08
Bonjour à tous et à Loupgris qui m'a bien depanné la derniere fois ( merci encore LoupGris et à tous pour ce fabuleux forum ca fait plaisir !)
Voila bon ben je commence de suite mon explication :
Je precise que je dois absolument utiliser xcopy.exe car par la suite je vais rajouter les parametres d'exclusion .
Donc : voici une partie du code
-----------------------------------------------------------------------------------------
Private Sub Copie_Click()
..
....
Call Shell("cmd /c xcopy.exe " & Chemin & " " & Chemin2 & " /e /h", vbNormalFocus)
A cote de mon bouton j'ai rajouter une zone de texte "Text6.Text " ce que je cherche à faire c'est que pendant que la copie se passe je voudrais que "En cours" apparaisse (ca c'est ok) et que lorsque la copie est terminée ( la fenetre DOS se ferme automatiquement) je voudrais que "Réalisé" apparaisse.
J'ai essayé de faire qq essais mais c'etait pas comme je voulais.
Pour moi je pensais faire :
- Apres que la copie soit terminée , un fichier pourrait etre créé et avec une fonction de if exist "lefichier" etc etc ou qq chose comme ca , bah ma zone de texte serait renseignée automatiquement par " Réalisé"
MAIS le probleme c'est que je ne peux mettre de timer car la copie depend de la taille du rep (donc aleatoire) et aussi la copie se realise par un call shell("cmd /c xcopy.exe......")
Est ce que vous voyez ce que je veux dire ?
Voyez vous une resolution à mon probleme, parce que moi je cale ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 22 mars 2005 à 23:05
Tiens je te donne ce code brut de décoffrage, je m'en sert dans les
softs pour afficher le manuel PDF et bloquer le soft tant que le manuel
est ouvert.
en déclaration
Public Const SYNCHRONIZE = &H100000
Public Const INFINITE = &HFFFFFFFF ' Infinite timeout
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
sur le click
Dim pid As Long
Dim phnd As Long
pid = Shell( TaLigneDeCommande, vbMaximizedFocus)
If pid <> 0 Then
phnd = OpenProcess(SYNCHRONIZE, 0, pid)
If phnd <> 0 Then
Call WaitForSingleObject(phnd, INFINITE)
Call CloseHandle(phnd)
End If
End If
le programme reste bloquer (le thread est suspendu) sur
WaitForSingleObject tant que l'autre ne s'est pas terminer. Si tu as
des choses à faire avant (comme Text6.Text = "En cours") il faut le faire avant le shell ou au pire entre le shell et le if.
Pour ce que tu as à fiare au retour, tu le fais simplement après ce code.
Voila, en espérant que ça t'aide, sinon je serais là demain pour plus
d'explication (si le chef me laisse le temps de faire un tour par ici).
<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,
nous serions assez bête pour ne pas le comprendre malgré tout.
radcur
Messages postés282Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention15 août 20122 23 mars 2005 à 00:57
je te suggère ShellWait que tu trouveras sur ce site.
Tant qu'un process roule, il le détecte donc tu pourras par la suite
lui faire afficher Complété dès qu'il est terminer.
cs_Angus59
Messages postés12Date d'inscriptionjeudi 8 avril 2004StatutMembreDernière intervention 8 avril 2005 23 mars 2005 à 11:08
Merci à vous 2 Casy et Radcur ,
C'est ok c'est ca que je voulais et ca fonctionne.
Je suis debutant donc je connais pas encore tout.
Sinon au fur et a mesure que je "developpe" j'ai l'impression qu'avec VB on peux tout faire, hallucinant !