|
Tipp 0491
|
Dateien in den Papierkorb verschieben
|
|
|
Autor/Einsender: Datum: |
|
Detlev Schubert 19.04.2006 |
|
Entwicklungsumgebung: |
|
VB 6 |
|
|
Um in Visual Basic Dateien zu löschen, wird in der Regel die dafür vorgesehene Funktion Kill verwendet. Damit sind Dateien jedoch
unwiederbringlich gelöscht, und landen nicht im Windows-Papierkorb. Somit ist es also nicht möglich, eine versehentlich gelöschte Datei über den
Papierkorb wiederherzustellen.
|
Damit die eigene Anwendung, wie u.a. auch der Windows-Explorer, Dateien in den Papierkorb löschen kann, müssen wir in die API-Trickkiste greifen.
Mit der Allround-Funktion SHFileOperation für Dateioperationen und dem Struktur-Parameter FO_DELETE ist dies recht
schnell erledigt. Allerdings erwartet die Funktion, wie fast alle API-Funktion einen NULL-terminierten String, und daher müssen wir die VB-Daten
erst entsprechend aufbereiten. Dies wird von der Funktion DeleteInTrash übernommen, der wir im Beispiel ein entsprechendes Datenfeld
mit den zu löschenden Dateien übergeben.
|
|
|
Die Funktion DeleteInTrash im Tipp wurde so aufgebaut, dass lediglich durch den Austausch einiger weniger Parameter Dateien nicht gelöscht
sondern auch "Explorer-Like" kopiert und/oder verschoben werden können. Die dafür benötigten Konstanten sind im Download-Beispiel enthalten.
|
|
|
Option Explicit
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
Private Const FO_DELETE As Long = &H3&
Private Const FOF_SILENT As Long = &H4&
Private Const FOF_NOCONFIRMATION As Long = &H10&
Private Const FOF_ALLOWUNDO As Long = &H40&
Private Declare Function SHFileOperation Lib "shell32.dll" Alias _
"SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Public Function DeleteInTrash(vFiles As Variant, Optional hHandle _
As Long, Optional bFrage As Boolean, Optional bShowProgress _
As Boolean) As Boolean
Dim FileOp As SHFILEOPSTRUCT
Dim intI As Integer
With FileOp
If IsArray(vFiles) Then
For intI = LBound(vFiles) To UBound(vFiles)
.pFrom = .pFrom & vFiles(intI) & vbNullChar
Next
.pFrom = .pFrom & vbNullChar
ElseIf VarType(vFiles) = vbObject Then
If TypeOf vFiles Is Collection Then
For intI = 1 To vFiles.Count
.pFrom = .pFrom & vFiles(intI) & vbNullChar
Next
.pFrom = .pFrom & vbNullChar
End If
ElseIf VarType(vFiles) = vbString Then
.pFrom = vFiles
If Right$(.pFrom, 1) <> vbNullChar Then
.pFrom = .pFrom & vbNullChar
End If
If Mid$(.pFrom, Len(.pFrom) - 1, 1) <> vbNullChar Then
.pFrom = .pFrom & vbNullChar
End If
End If
.hwnd = hHandle
.wFunc = FO_DELETE
.fFlags = FOF_ALLOWUNDO
If Not bShowProgress Then .fFlags = .fFlags Or FOF_SILENT
If Not bFrage Then .fFlags = .fFlags Or FOF_NOCONFIRMATION
DeleteInTrash = Not CBool(SHFileOperation(FileOp) Or _
.fAnyOperationsAborted)
End With
End Function
|
|
|
Code im Codebereich der Form |
|
|
Option Explicit
Dim sFiles As String
Private Sub Command1_Click()
Dim aFiles() As String
Dim Abfrage As Boolean
Abfrage = IIf(Option1.Value = True, True, False)
aFiles = Split(sFiles, ";")
If DeleteInTrash(aFiles, Me.hwnd, Abfrage, True) Then
MsgBox "Alle markierten Dateien wurden in den Papierkorb " & _
"gelöscht.", vbOKOnly
Label1.Caption = "0"
Else
MsgBox "Beim Löschen ist ein Fehler aufgetreten.", vbOKOnly
End If
File1.Refresh
End Sub
Private Sub File1_Click()
Dim intI As Integer
Dim intJ As Integer
sFiles = ""
For intI = 0 To File1.ListCount - 1
If File1.Selected(intI) = True Then
sFiles = sFiles & ApplicationPath & File1.List(intI) & ";"
Command1.Enabled = True
intJ = intJ + 1
Label1.Caption = Trim$(Str$(intJ))
End If
Next
If intI < 1 Then Command1.Enabled = False
End Sub
Private Function ApplicationPath() As String
ApplicationPath = App.Path & _
IIf(Right(App.Path, 1) = "\", "", "\")
End Function
|
|
|
|
Die Funktion SHFileOperation steht bei den Betriebssystemen Windows 95 und NT erst zur Verfügung, wenn der
Internet-Explorer ab Version 4.0 installiert ist.
|
|
Windows-Version |
95 |
|
|
98 |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
VB-Version |
VBA 5 |
|
|
VBA 6 |
|
|
VB 4/16 |
|
|
VB 4/32 |
|
|
VB 5 |
|
|
VB 6 |
|
|
|
|
Download (5,8 kB)
|
Downloads bisher: [ 662 ]
|
|
|