Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

API SHfileoperation et flag Annulation

2 réponses
Avatar
sergio
Bonsoir,

pour mettre à la Corbeille des fichers j'utilise sous VB5 l'API
l"shfileoperation".

'===========================
' API pour jeter à la corbeille un fichier
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

'API utilisée pour jeter des fichiers à la corbeille
Private Declare Function SHFileOperation Lib "Shell32.dll" Alias
"SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

'Constantes nécessaires
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40

With FileOperation
.wFunc = FO_DELETE
.pFrom = Trim(txtDir.Text)
.fFlags = FOF_ALLOWUNDO
End With
' Ouvre la boite de dialogue 'Confirmation de la suppression du fichier'
lReturn = SHFileOperation(FileOperation)
'===========================

L'opération se déroule correctement que je réponde affirmativement ou
négativement à la boite de dialogue, mais lorsque la réponse est négative je
voudrais lancer une autre procédure. Le problème c'est que le flag
fAnyOperationsAborted se comporte bizarrement. Lorsqu'il est à TRUE (réponse
négative), il ne répond pas à l'instruction :
If FileOperation.fAnyOperationsAborted = True Then Exit Sub
... et les instructions sous cette ligne se déroulent.

Que puis-je faire pour résoudre ce problème ? Sur le Web il existe des
solutions mais pour VB.Net. Y en aurait-il une pour VB5 ?

Merci pour votre aide.
Serge

2 réponses

Avatar
Jean-marc
sergio wrote:
Bonsoir,



Hello,

pour mettre à la Corbeille des fichers j'utilise sous VB5 l'API
l"shfileoperation".



...

L'opération se déroule correctement que je réponde affirmativement ou
négativement à la boite de dialogue, mais lorsque la réponse est
négative je voudrais lancer une autre procédure. Le problème c'est
que le flag fAnyOperationsAborted se comporte bizarrement. Lorsqu'il
est à TRUE (réponse négative), il ne répond pas à l'instruction :
If FileOperation.fAnyOperationsAborted = True Then Exit Sub
... et les instructions sous cette ligne se déroulent.

Que puis-je faire pour résoudre ce problème ? Sur le Web il existe des



Le problème est ailleurs dans ton code, peut être un Exit sub oublié
ou quelques chose comme cela car tout fonctionne bien.

j'ai copié/collé ton code, juste ajouté une petite fonction pour tester,
comme ceci:

Private Sub Command1_Click()
Dim lReturn As Long
Dim FileOperation As SHFILEOPSTRUCT

With FileOperation
.wFunc = FO_DELETE
.pFrom = "c:test.dat"
.fFlags = FOF_ALLOWUNDO
End With
' Ouvre la boite de dialogue 'Confirmation de la suppression du fichier'
lReturn = SHFileOperation(FileOperation)

If FileOperation.fAnyOperationsAborted Then
MsgBox "annulé"
' faire ic un exit sub si nécessaire
Else
MsgBox "pas annulé"
End If

End Sub

Et tout se comporte bien.

Peux tu essayer avec exactement cette fonction comme je l'indique
ici ? Je suis (presque) sur que tu trouveras alors que l'erreur est
ailleurs.

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
sergio
Rebonsoir,

Ca y est trouvé, j'ai trouvé le mystère.
Il fallait écrire :
If FileOperation.fAnyOperationsAborted Then Exit Sub

et non pas :
If FileOperation.fAnyOperationsAborted = True Then Exit Sub

Merci beaucoup pour votre aide et bonne soirée.
Serge


"Jean-marc" wrote:

sergio wrote:
> Bonsoir,

Hello,

> pour mettre à la Corbeille des fichers j'utilise sous VB5 l'API
> l"shfileoperation".

....

> L'opération se déroule correctement que je réponde affirmativement ou
> négativement à la boite de dialogue, mais lorsque la réponse est
> négative je voudrais lancer une autre procédure. Le problème c'est
> que le flag fAnyOperationsAborted se comporte bizarrement. Lorsqu'il
> est à TRUE (réponse négative), il ne répond pas à l'instruction :
> If FileOperation.fAnyOperationsAborted = True Then Exit Sub
> ... et les instructions sous cette ligne se déroulent.
>
> Que puis-je faire pour résoudre ce problème ? Sur le Web il existe des

Le problème est ailleurs dans ton code, peut être un Exit sub oublié
ou quelques chose comme cela car tout fonctionne bien.

j'ai copié/collé ton code, juste ajouté une petite fonction pour tester,
comme ceci:

Private Sub Command1_Click()
Dim lReturn As Long
Dim FileOperation As SHFILEOPSTRUCT

With FileOperation
.wFunc = FO_DELETE
.pFrom = "c:test.dat"
.fFlags = FOF_ALLOWUNDO
End With
' Ouvre la boite de dialogue 'Confirmation de la suppression du fichier'
lReturn = SHFileOperation(FileOperation)

If FileOperation.fAnyOperationsAborted Then
MsgBox "annulé"
' faire ic un exit sub si nécessaire
Else
MsgBox "pas annulé"
End If

End Sub

Et tout se comporte bien.

Peux tu essayer avec exactement cette fonction comme je l'indique
ici ? Je suis (presque) sur que tu trouveras alors que l'erreur est
ailleurs.

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;