Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0520: Alle in der Zwischenablage befindlichen Dateien auslesen

 von 

Beschreibung 

Dieser Tipp liest die Dateiliste der Zwischenablage aus, nachdem Dateien mit dem Explorer in den Zwischenspeicher kopiert wurden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

CloseClipboard, DragQueryFileA (DragQueryFile), GetClipboardData, IsClipboardFormatAvailable, OpenClipboard

Download:

Download des Beispielprojektes [2,97 KB]

'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 Projekt1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Listen-Steuerelement "List1"
'
' Autor: Achim Neubauer (entrox@freak-style.de)

Option Explicit

Private Sub Command1_Click()
    Dim arrFiles() As String
    Dim T As Long
    
    If GetDragFilelist(Me.hwnd, arrFiles) > 0 Then
      For T = 1 To UBound(arrFiles)
        List1.AddItem arrFiles(T)
      Next T
    End If
End Sub

Private Sub Form_Load()
    Dim arrFiles() As String
    Dim T As Long
    
    If GetDragFilelist(Me.hwnd, arrFiles) > 0 Then
      For T = 1 To UBound(arrFiles)
        List1.AddItem arrFiles(T)
      Next T
    End If
End Sub

'---------- Ende Formular "Form1" alias Form1.frm  ----------
'--------- Anfang Modul "Module1" alias Module1.bas ---------
'
' Autor: Achim Neubauer (entrox@freak-style.de)

Option Explicit

Public Declare Function IsClipboardFormatAvailable Lib "user32" ( _
                        ByVal wFormat As Long) As Long
                        
Public Declare Function OpenClipboard Lib "user32" ( _
                        ByVal hwnd As Long) As Long
                        
Public Declare Function GetClipboardData Lib "user32" ( _
                        ByVal wFormat As Long) As Long
                        
Public Declare Function DragQueryFile Lib "shell32.dll" _
                        Alias "DragQueryFileA" ( _
                        ByVal hDrop As Long, _
                        ByVal UINT As Long, _
                        ByVal lpStr As String, _
                        ByVal ch As Long) As Long
                        
Public Declare Function CloseClipboard Lib "user32" () As Long

Public Const CF_HDROP = 15
Public Const MAX_PATH As Long = 260

Public Function GetDragFilelist(Handle As Long, arrFile() As String) As Long
    Dim hDrop As Long 'Handle auf die Clipboard-Daten
    Dim nFiles As Long 'Anzahl der Dateien in den Daten
    Dim FileName As String 'temporäre Variable
    Dim T As Long 'temporäre Variable
    Dim result As Long 'temporäre Variable
    
    ReDim arrFile(0)
    
    If IsClipboardFormatAvailable(CF_HDROP) Then 'Wenn Daten vom Typ CF_HDROP vorhanden sind
        Call OpenClipboard(0&) 'Clipboard öffnen
        hDrop = GetClipboardData(CF_HDROP) 'Handle auf Daten holen
        
        nFiles = DragQueryFile(hDrop, -1&, "", 0) 'Anzahl der Dateien abfragen
        
        ReDim arrFile(nFiles)
        
        For T = 0 To nFiles - 1
            FileName = Space(MAX_PATH)
            result = DragQueryFile(hDrop, T, FileName, Len(FileName)) 'Dateiname(T) holen
            
            arrFile(T + 1) = Left(FileName, result)
        Next T
    End If
    
    GetDragFilelist = nFiles 'Anzahl der geholten Dateien als Funktionswert  zurückliefern
    
    CloseClipboard 'Clipboard schließen
    
End Function
'---------- Ende Modul "Module1" alias Module1.bas ----------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

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 4 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 tf_real10 am 20.05.2005 um 12:15

ich suche auch nach der umgekehrten Funktion also den Pfad in die Zwischenablage zu schreiben ist dass irgendwie möglich??

Kommentar von Ernst Nauli am 31.08.2004 um 10:53

Ich suche schon lange den umgekehrten Weg. D.h.

Gibt es auch ein Beispielprogramm um Dateien so ins clipboard zu schreiben, dass sie vom Explorer mit "Einfügen" kopiert werden?

Kommentar von Raanubis am 12.03.2003 um 18:53

Unter VB6 und WinXP funzt es, das prob ist meiner meinung nur die Volle Pfadangabe, aber das kann man ja in nen paar sec ändern.

Achtung Leutz, man sollte vorher dateien markieren und anschliessend mit rechte maustaste und kopieren die Dateien in die Zwischenablage holen bevor man es testet, denn tut man es nicht so kann auch keine Datei ausgelesen werden ;)

Kommentar von Herbert M. am 20.10.2002 um 16:04

das geht doch auch mit Clipboard.getText
bzw. Clipboard.getData