USB COPY

PBDLpc Messages postés 31 Date d'inscription lundi 9 octobre 2000 Statut Membre Dernière intervention 2 octobre 2005 - 25 mai 2005 à 15:06
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/31598-usb-copy

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
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és 5 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 10 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és 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
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és 5 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 10 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és 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
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.

Sur le site de vbAccelerator:
http://www.vbaccelerator.com/home/VB/Code/Libraries/Threading/Multi-threading_using_classes_in_ActiveX_EXEs/article.asp

Guy
Guizmodu38 Messages postés 5 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 10 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és 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
26 mai 2005 à 10:35
C'est en VB6, donc pas de threads, donc DoEvents en effet ;o)
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
25 mai 2005 à 21:36
Et pense aussi aux DoEvents!
PBDLpc Messages postés 31 Date d'inscription lundi 9 octobre 2000 Statut Membre Derniè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...
Rejoignez-nous