VB 5/6-Tipp 0321: Den Shell-Dialog zum Kopieren nutzen
von ActiveVB
Beschreibung
Die Windows Shell bietet den allseits bekannten Dialog zur freien Verwendung an. Er lässt sich daher natürlich auch unter VB nutzen. Dabei können einige Flags gesetzt werden um das Vorgehen recht komfortabel zu parametrieren. Dieses Beispiel zeigt das Kopieren von Dateien mit Hilfe dieses Dialogs.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command2" ' Steuerelement: Kontrollkästchen-Steuerelement "Check4" ' Steuerelement: Kontrollkästchen-Steuerelement "Check3" ' Steuerelement: Kontrollkästchen-Steuerelement "Check2" ' Steuerelement: Verzeichnisauswahlliste "Dir1" ' Steuerelement: Dateiauswahlliste "File1" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Kontrollkästchen-Steuerelement "Check1" Option Explicit Private Declare Function SHFileOperation Lib "shell32.dll" _ Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) _ As Long 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 Const FO_MOVE = &H1 Const FO_COPY = &H2 Const FO_DELETE = &H3 Const FO_RENAME = &H4 Const FOF_MULTIDESTFILES = &H1 Const FOF_CONFIRMMOUSE = &H2 Const FOF_SILENT = &H4 Const FOF_RENAMEONCOLLISION = &H8 Const FOF_NOCONFIRMATION = &H10 Const FOF_WANTMAPPINGHANDLE = &H20 Const FOF_ALLOWUNDO = &H40 Const FOF_FILESONLY = &H80 Const FOF_SIMPLEPROGRESS = &H100 Const FOF_NOCONFIRMMKDIR = &H200 Private Sub Form_Load() Call MakeFiles End Sub Private Sub Command1_Click() Dim Files$ Dim SFO As SHFILEOPSTRUCT MousePointer = vbHourglass Command1.Enabled = False DoEvents Files = Files & App.Path & "\Test\*.*" & Chr$(0) Files = Files & Chr$(0) With SFO .Hwnd = Me.Hwnd .wFunc = FO_COPY .pFrom = Files .pTo = App.Path & "\Ziel" & Chr$(0) If Check1.Value = vbUnchecked Then .fFlags = FOF_FILESONLY If Check2.Value = vbChecked Then _ .fFlags = .fFlags Or FOF_SIMPLEPROGRESS If Check3.Value = vbChecked Then _ .fFlags = .fFlags Or FOF_NOCONFIRMATION If Check4.Value = vbChecked Then _ .fFlags = .fFlags Or FOF_SILENT End With Call SHFileOperation(SFO) File1.Refresh Dir1.Refresh If SFO.fAnyOperationsAborted Then Call MsgBox("Enige Operationen wurden nicht ausgeführt!") End If MousePointer = vbDefault Command1.Enabled = True End Sub Private Sub Command2_Click() Command1.Enabled = False Command2.Enabled = False MousePointer = vbHourglass DoEvents Call DelZiel MousePointer = vbDefault Command1.Enabled = True Command2.Enabled = True End Sub Private Sub MakeFiles() Dim x&, y&, FN%, aa$, bb$ Command1.Enabled = False Command2.Enabled = False MousePointer = vbHourglass DoEvents If Dir$(App.Path & "\Ziel", vbDirectory) = "" Then MkDir App.Path & "\Ziel" End If 'Ein paar Ordner und Dateien erstellen bb = App.Path & "\Test" If Dir$(bb, vbDirectory) = "" Then MkDir bb aa = String(1024, "x") For y = 0 To 500 FN = FreeFile Open bb & "\File" & CStr(y) & ".txt" For Output As #FN Print #FN, aa Close FN Next y If Dir$(bb & "\Ordner1", vbDirectory) = "" Then MkDir bb & "\Ordner1" End If If Dir$(bb & "\Ordner1\Ordner2", vbDirectory) = "" Then MkDir bb & "\Ordner1\Ordner2" End If File1.Path = App.Path & "\Ziel" Dir1.Path = App.Path & "\Ziel" MousePointer = vbDefault Command1.Enabled = True Command2.Enabled = True End Sub Private Sub DelZiel() Dim SFO As SHFILEOPSTRUCT With SFO .Hwnd = Me.Hwnd .wFunc = FO_DELETE .pFrom = App.Path & "\Ziel\*.*" & Chr$(0) & Chr$(0) .pTo = "" & Chr$(0) .fFlags = .fFlags Or FOF_NOCONFIRMATION Or FOF_SILENT End With Call SHFileOperation(SFO) File1.Refresh Dir1.Refresh End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 5 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von trashX am 07.01.2002 um 22:27
warum nimmst du bei files$ zwei nullstrings? Files$ = App.Path & "\Test\*.*" & Chr$(0) wäre doch genug
Kommentar von Romero am 07.12.2001 um 11:28
Was für ein Wert hat "Me.hwnd" ? Und von wo nimmst du das?
Kommentar von chris am 02.08.2001 um 12:55
was machen die Zeilen nach der CONST Deklaration?
Kommentar von Daniel J am 16.07.2001 um 18:42
wie kann ich nur nicht vorhandene dateien kopieren?
Also Überschreiben automatisch "nein"?
Kommentar von MvdL am 10.12.2000 um 02:27
Kann man das ganze auch Automatisieren (immer das gleiche verzeichnis kopieren z.b. beim systemstart)?