以使用各种API调用来获取剪贴板上文件的FileDropList,以及更多的调用来获取DropEffect,它告诉您文件是从Windows文件资源管理器复制或剪切的位置。 在VB。NET,它甚至更容易从剪贴板获得FileDropList使用专门的字符串集合。但我不知道如何得到下降效果。通过查看旧方法的作用,并使用我找到的一个c#示例,我能够得到DropEffect。 要获得DropEffect,将一个对象设置为My.Computer.Clipboard。GetData("Preferred DropEffect"),然后将前4个字节读入字节数组。第一个字节是DropEffect。我没有使用其他3个字节,但旧代码抓取他们由于格式可变,所以我做了。 在VB6中获取FileDropList和DropEffect 在VB6中,您可以使用对剪贴板函数的调用来检索文件列表,然后再使用另一个调用来获得具有drop效果的数据。对MoveMemory的调用将数据置于我们可以使用的格式中。(在VB6中如何做到这一点的完整示例可以在其他地方找到)。 隐藏,收缩,复制Code
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function IsClipboardFormatAvailable _
Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function RegisterClipboardFormat Lib "user32" +
Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
(ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Dim hDrop As Long
Dim nFiles As Long
Dim i As Long
Dim desc As String
Dim Filename As String
Dim pt As POINTAPI
Dim lngEffect As Long
Dim lngFormat As Long
Dim hGlobal As Long
Const MAX_PATH As Long = 260
If IsClipboardFormatAvailable(CF_HDROP) Then
If OpenClipboard(0&) Then
hDrop = GetClipboardData(CF_HDROP)
nFiles = DragQueryFile(hDrop, -1&, "", 0)
ReDim Files(0 To nFiles - 1) As String
Filename = Space(MAX_PATH)
For i = 0 To nFiles - 1
Call DragQueryFile(hDrop, i, Filename, Len(Filename))
Files(i) = TrimNull(Filename)
lngFormat = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT)
hGlobal = GetClipboardData(lngFormat)
If (hGlobal) Then
MoveMemory lngEffect, ByVal hGlobal, 4
DropEffect = lngEffect
End If
End If
End If
在VB.NET中获取FileDropList和DropEffect 在VB中得到DropEffect。NET要求从剪贴板中获取“首选DropEffect”数据,并用内存流读取它。 隐藏,收缩,复制Code
If My.Computer.Clipboard.ContainsFileDropList() Then
Dim DropEffectData(3) As Byte
Dim DropEffectCheck As Object = _
My.Computer.Clipboard.GetData("Preferred DropEffect")
DropEffectCheck.Read(DropEffectData, 0, DropEffectData.Length)
Select Case DropEffectData(0)
Case 2
DropEff = DragDropEffects.Move
DropEffType = "Move"
Case 5
DropEff = DragDropEffects.Copy
DropEffType = "Copy"
Case Else
DropEffType = "???"
End Select
DropEffNum = DropEffectData(0).ToString
TextBox1.Text = String.Concat(DropEffNum, " - ", DropEffType)
Dim FileNameCollection As Collections.Specialized.StringCollection = _
My.Computer.Clipboard.GetFileDropList()
For Each FileName As String In FileNameCollection
RichTextBox1.Text = String.Concat(RichTextBox1.Text, FileName, vbCrLf)
End If
样例应用程序 示例应用程序显示了DropEffect和放在剪贴板上的文件列表。在从文件资源管理器中剪切和复制文件之间切换,以查看DropEffect更改。 本文转载于:http://www.diyabc.com/frontweb/news186.html