Ehhez a megoldáshoz néhány Windows függvényhíváson keresztül vezet az út. Egész pontosan a DragQueryFile függvény használatára lesz szükségünk, melyhez fel kell használnunk néhány másik függvényt is.
Nézzük sorban: első lépésként megnyitjuk a vágólapot az alkalmazásunk számára az OpenClipboard függvény hívásával. Ennek paraméterként az adott Form-unk azonosítóját adjuk át.
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
If Win32.OpenClipboard(handle) Then
Lekérdezzük a vágólapon lévő adatokat a GetClipboardData függvénnyel. Paraméterként egy konstanst kell megadnunk, mely azt mondja meg a függvénnyel, hogy milyen jellegű adatokra van szükségünk. Számunkra most a CF_HDROP konstans szükséges, mely az állományok mozgatásával, másolásával kapcsolatos. Visszatérési értékként kapunk egy azonosítót, mely, ha nem nulla, akkor van értékes adat a vágólapon.
Dim handle As Integer = Win32.GetClipboardData(Win32.CF_HDROP)
If handle <> 0 Then
Ekkor már csak le kell kérdeznünk, hogy mik is ezek. Ez a művelet két lépésből áll: az elsőben lekérdezzük, hogy hány állományról van szó, melynek adata a vágólapra került. Ehhez szintén a DragQueryFile függvényt kell használnunk, melynek, ha a második paraméterében 0xFFFFFFFF értéket adunk meg, akkor visszatérési értékként azt a számot kapjuk, hogy hány állomány került a vágólapra.
Dim filename As New StringBuilder(260)
Dim count As Integer = Win32.DragQueryFile(handle, -1, filename, 260)
Meghatározva ezt a számot már tudunk egy ciklust írni, mely végigmegy az összes állományon és lekérdezi azok neveit, az elérési útjukkal együtt. Itt a DragQueryFile-nál a második paraméterben az adott állomány sorszámát kell megadnunk, majd a harmadik paraméterbe kapjuk vissza az állománynevet, melyet tetszés szerint felhasználhatunk.
Dim i As Integer
For i = 0 To count - 1
If Win32.DragQueryFile(handle, i, filename, 260) > 0 Then
listBox1.Items.Add(filename)
End If
Next i
End If
A lekérdezés végén a CloseClipboard függvény hívásával zárjuk a vágólapot.
Win32.CloseClipboard()
End If
End Sub