PBDLpc
Messages postés31Date d'inscriptionlundi 9 octobre 2000StatutMembreDernière intervention 2 octobre 2005
-
25 mai 2005 à 15:06
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 2007
-
14 juil. 2005 à 06:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 14 juil. 2005 à 06:22
AllAPI est ton ami comme on dit! (cf. http://www.mentalis.org/index2.shtml => API-Viewer et API-Guide)
Pour une version Fr de API-Guide mais juste un peu moins complète : www.progotop.com de notre ami DarkSidious
Sinon, voici la définition donnée par POP-API :
"
La fonction SHFileOperation permet d'afficher la boîte de progression utilisée par Windows lors de la copie ou la suppression de fichiers.
"
int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);
lpFileOp : Variable de type SHFILEOPSTRUCT qui définit l'opération a effectuer sur le fichier.
LISTE DES OPERATIONS
Private Const FO_COPY &H2 Copie les fichiers spécifiés de pFrom vers pTo
Private Const FO_DELETE &H3 Efface les fichiers de pFrom (pTo est ignoré)
Private Const FO_MOVE &H1 Déplace les fichiers de pFrom vers pTo
Private Const FO_RENAME &H4 Renomme les fichiers spécifiés de pFrom
LISTE DES DRAPEAUX
Private Const FOF_ALLOWUNDO &H40 Préserve de l'opération "ANNULER", si possible
Private Const FOF_CONFIRMMOUSE = &H2
Private Const FOF_FILESONLY &H80 Exécute l'opération seulement sur des fichiers si (*.*) est utilisé dans pFrom
Private Const FOF_MULTIDESTFILES &H1 pTo spécifie de multiples destinations
Private Const FOF_NOCONFIRMATION &H10 Pas de demande de confirmation
Private Const FOF_NOCONFIRMMKDIR &H200 Ne demande pas de confirmation lors de la création d'un répertoire
Private Const FOF_RENAMEONCOLLISION = &H8
Private Const FOF_SILENT &H4 N'affiche pas la boîte de progression de l'opération
Private Const FOF_SIMPLEPROGRESS &H100 Affiche la boîte de progression mais pas les noms des fichiers
Private Const FOF_WANTMAPPINGHANDLE = &H20
En fonction de la rapidité de l'ordinateur, de la taille des fichiers et des options définies, il est possible que la boîte de progression n'apparaîsse pas à l'écran (ou bien trop vite pour être vue...).
Quant à l'API-Guide :
Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
lpFileOp : Pointer to an SHFILEOPSTRUCT structure that contains information the function needs to carry out the operation.
Returns zero if successful or nonzero if an error occurs.
Pour les exemples d'utilisations je te laisse te reporter à ces 3 bibles des APIs!
Enjoy
Guizmodu38
Messages postés5Date d'inscriptionvendredi 7 mai 2004StatutMembreDernière intervention10 juillet 2005 10 juil. 2005 à 12:47
me revoilà...
désolé d'avoir mis du temps mais les vacances ça m'prend beaucoup plus de temps que le boulo
j'ai testé cette solution... le principe à l'air pas mal et ça marche plutot bien sauf au moment de lancer la copie
DirCopy = SHFileOperation(SHFileOp)
à cette ligne là précisement...
alors j'ai essayé en créant le répertoire dans lequel vont les fichiers... en mettant un "" à la fin du chemin ... enfin tt plein de truc... mais ça marche toujours pas
si quelqu'un sait comment fonctionne l'api pt etre qu'il aura la réponse... en attendant j'v essayé de trouver des infos là dessus
autre possibilité que j'avais envisagée: créer un exe sans interface qui soit lancé juste pendant la copie... comme ça l'exe avec interface continu a tourné sans pb... enfin j'espere
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 20151 7 juin 2005 à 17:28
pour copier des répertoires utilise plutot cette api :
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
place ceci dans un module :
Option Explicit
Private Type SHFILEOPSTRUCT
HWnd As Long
wFunc As FO_Enum 'as long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As String
End Type
Private Enum FO_Enum
FO_DELETE = &H3
FO_MOVE = &H1
FO_COPY = &H2
End Enum
Private Const FOF_ALLOWUNDO = &H40
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Public Function DirCopy(ByVal DirSource As String, ByVal DirDestination As String) As Long
Dim SHFileOp As SHFILEOPSTRUCT
With SHFileOp
'copy the directory
.wFunc = FO_COPY
'Select the directory
.pFrom = DirSource
'destination
.pTo = DirDestination
End With
'perform file operation
DirCopy = SHFileOperation(SHFileOp)
End Function
Public Function MoveCopy(ByVal DirSource As String, ByVal DirDestination As String) As Long
Dim SHFileOp As SHFILEOPSTRUCT
With SHFileOp
'move the directory
.wFunc = FO_MOVE
'Select the directory
.pFrom = DirSource
'destination
.pTo = DirDestination
End With
'perform file operation
MoveCopy = SHFileOperation(SHFileOp)
End Function
Guizmodu38
Messages postés5Date d'inscriptionvendredi 7 mai 2004StatutMembreDernière intervention10 juillet 2005 30 mai 2005 à 12:04
Si j'ai bien compris ça part de l'application de base, ça en lance un autre et si l'action n'est pas fini assez vite ça la shoot.
Le mauvais point de mon prgm c'est que pendant la copie l'interface reste figée. Et comme la copie d'un usb ça peut etre long j'veux pas shooter le processus pour autant.
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 28 mai 2005 à 11:01
La méthode la plus fiable pour exécuter une action 'out of process' est de passer par un ActiveX EXE (ca fonctionne très bien)
Le seul compromis pour faire du multithreading.
Guizmodu38
Messages postés5Date d'inscriptionvendredi 7 mai 2004StatutMembreDernière intervention10 juillet 2005 27 mai 2005 à 09:49
J'ai essayé de mettre des DoEvents avant et après la commande de copie mais ça change rien. A mon avis, pour un fichier un peu gros les DoEvents ne servent a rien.
J'connais pas trop cette fonction mais d'apres moi, si ya un fichier en cours de copie les DoEvents que j'ai mis doivent forcément attendre la fin de la copie.
Si j'ai mal utilisé la commande DoEvents ou si vous avez d'autres solutions ça m'intéresse.
Mindiell
Messages postés558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 20071 26 mai 2005 à 10:35
C'est en VB6, donc pas de threads, donc DoEvents en effet ;o)
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 25 mai 2005 à 21:36
Et pense aussi aux DoEvents!
PBDLpc
Messages postés31Date d'inscriptionlundi 9 octobre 2000StatutMembreDernière intervention 2 octobre 2005 25 mai 2005 à 15:06
salut, pour éviter que ton interface ne se fige, tu peux utiliser des thread (cherche sur le site, il y a des exemples d'utilisation). En espérant que ça t'aide...
14 juil. 2005 à 06:22
Pour une version Fr de API-Guide mais juste un peu moins complète : www.progotop.com de notre ami DarkSidious
Sinon, voici la définition donnée par POP-API :
"
La fonction SHFileOperation permet d'afficher la boîte de progression utilisée par Windows lors de la copie ou la suppression de fichiers.
"
int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);
lpFileOp : Variable de type SHFILEOPSTRUCT qui définit l'opération a effectuer sur le fichier.
LISTE DES OPERATIONS
Private Const FO_COPY &H2 Copie les fichiers spécifiés de pFrom vers pTo
Private Const FO_DELETE &H3 Efface les fichiers de pFrom (pTo est ignoré)
Private Const FO_MOVE &H1 Déplace les fichiers de pFrom vers pTo
Private Const FO_RENAME &H4 Renomme les fichiers spécifiés de pFrom
LISTE DES DRAPEAUX
Private Const FOF_ALLOWUNDO &H40 Préserve de l'opération "ANNULER", si possible
Private Const FOF_CONFIRMMOUSE = &H2
Private Const FOF_FILESONLY &H80 Exécute l'opération seulement sur des fichiers si (*.*) est utilisé dans pFrom
Private Const FOF_MULTIDESTFILES &H1 pTo spécifie de multiples destinations
Private Const FOF_NOCONFIRMATION &H10 Pas de demande de confirmation
Private Const FOF_NOCONFIRMMKDIR &H200 Ne demande pas de confirmation lors de la création d'un répertoire
Private Const FOF_RENAMEONCOLLISION = &H8
Private Const FOF_SILENT &H4 N'affiche pas la boîte de progression de l'opération
Private Const FOF_SIMPLEPROGRESS &H100 Affiche la boîte de progression mais pas les noms des fichiers
Private Const FOF_WANTMAPPINGHANDLE = &H20
En fonction de la rapidité de l'ordinateur, de la taille des fichiers et des options définies, il est possible que la boîte de progression n'apparaîsse pas à l'écran (ou bien trop vite pour être vue...).
Quant à l'API-Guide :
Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
lpFileOp : Pointer to an SHFILEOPSTRUCT structure that contains information the function needs to carry out the operation.
Returns zero if successful or nonzero if an error occurs.
Pour les exemples d'utilisations je te laisse te reporter à ces 3 bibles des APIs!
Enjoy
10 juil. 2005 à 12:47
désolé d'avoir mis du temps mais les vacances ça m'prend beaucoup plus de temps que le boulo
j'ai testé cette solution... le principe à l'air pas mal et ça marche plutot bien sauf au moment de lancer la copie
DirCopy = SHFileOperation(SHFileOp)
à cette ligne là précisement...
alors j'ai essayé en créant le répertoire dans lequel vont les fichiers... en mettant un "" à la fin du chemin ... enfin tt plein de truc... mais ça marche toujours pas
si quelqu'un sait comment fonctionne l'api pt etre qu'il aura la réponse... en attendant j'v essayé de trouver des infos là dessus
autre possibilité que j'avais envisagée: créer un exe sans interface qui soit lancé juste pendant la copie... comme ça l'exe avec interface continu a tourné sans pb... enfin j'espere
7 juin 2005 à 17:28
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
place ceci dans un module :
Option Explicit
Private Type SHFILEOPSTRUCT
HWnd As Long
wFunc As FO_Enum 'as long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As String
End Type
Private Enum FO_Enum
FO_DELETE = &H3
FO_MOVE = &H1
FO_COPY = &H2
End Enum
Private Const FOF_ALLOWUNDO = &H40
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Public Function DirCopy(ByVal DirSource As String, ByVal DirDestination As String) As Long
Dim SHFileOp As SHFILEOPSTRUCT
With SHFileOp
'copy the directory
.wFunc = FO_COPY
'Select the directory
.pFrom = DirSource
'destination
.pTo = DirDestination
End With
'perform file operation
DirCopy = SHFileOperation(SHFileOp)
End Function
Public Function MoveCopy(ByVal DirSource As String, ByVal DirDestination As String) As Long
Dim SHFileOp As SHFILEOPSTRUCT
With SHFileOp
'move the directory
.wFunc = FO_MOVE
'Select the directory
.pFrom = DirSource
'destination
.pTo = DirDestination
End With
'perform file operation
MoveCopy = SHFileOperation(SHFileOp)
End Function
30 mai 2005 à 12:04
Le mauvais point de mon prgm c'est que pendant la copie l'interface reste figée. Et comme la copie d'un usb ça peut etre long j'veux pas shooter le processus pour autant.
28 mai 2005 à 11:01
Le seul compromis pour faire du multithreading.
Sur le site de vbAccelerator:
http://www.vbaccelerator.com/home/VB/Code/Libraries/Threading/Multi-threading_using_classes_in_ActiveX_EXEs/article.asp
Guy
27 mai 2005 à 09:49
J'connais pas trop cette fonction mais d'apres moi, si ya un fichier en cours de copie les DoEvents que j'ai mis doivent forcément attendre la fin de la copie.
Si j'ai mal utilisé la commande DoEvents ou si vous avez d'autres solutions ça m'intéresse.
26 mai 2005 à 10:35
25 mai 2005 à 21:36
25 mai 2005 à 15:06