就是在本程序中按“复制”后,在资源管理器按“粘贴”就可粘贴到文件。
反过来,当资源管理器中按“复制”后,在本程序按“粘贴”就可得到实际文件名。另外一个难题,就是如何实现“剪切”的功能(双向)请各位指教,谢谢!
反过来,当资源管理器中按“复制”后,在本程序按“粘贴”就可得到实际文件名。另外一个难题,就是如何实现“剪切”的功能(双向)请各位指教,谢谢!
解决方案 »
- 驱动程序不支持所需的属性,这是咋回事呢?
- vb 的文件传输问题
- 如何提高Richtextbox的全选及查找效率?
- 如何快速判断一个元素是否包含于某个集合?
- 关于水晶报表9的参数传递问题!十分着急!!!麻烦各位高手指点一下,谢谢!!!!
- 如何读取*.csv的行数,不用循环做,在线等。。。
- 请问在PictureBox中如何进行快速高效的刷新?
- ****怎么样吧一个顺序访问方式打开的文件清空?
- ?????要为客户推荐一套《学生学籍管理系统》,有意者请进--->
- 关于API资料
- CStr(Date) 这样会显示 2005-05-17 我想让它显示成20050517 怎么改? 重谢100分
- 急救,各位大哥帮帮忙吧
==============================
你听低级的嘛。还真看上分了,就算如此,这种问题你认为值多少分呀。呵呵。答题
============================
其实在资源管理器所复制或剪切的不是整个文件,而是文件地址,在剪切板中
可以直接访问到此信息,因为剪切板就像系统中的公共变量区域,任何程序都
可以对其读写及清除。所以通过剪切板操作很容易达到你的目的。但是,VB所提供的对象不足以达到你的要求,可能要借助于API的操作,以下提
供几个API给你作为参考。EmptyClipboard
OpenClipboard
CloseClipboard
SetClipboardData
GetClipboardData
IsClipboardFormatAvailableDragQueryFile
DragQueryPoint
GlobalAlloc
GlobalFree
GlobalLock
GlobalUnlock
CopyMemSHFileOperation对上面几个API有所了解后相信你的问题应该可以解决了,
以下再提供个把范例给你看看。
Public Function clipCopyFiles(Files() As String) As Boolean
Dim data As String
Dim df As DROPFILES
Dim hGlobal As Long
Dim lpGlobal As Long
Dim i As Long
'清除剪贴版中现存的数据
If OpenClipboard(0&) Then
Call EmptyClipboard
For i = LBound(Files) To UBound(Files)
data = data & Files(i) & vbNullChar
Next i
data = data & vbNullChar '为剪贴版拷贝操作分配相应大小的内存
hGlobal = GlobalAlloc(GHND, Len(df) + Len(data))
If hGlobal Then
lpGlobal = GlobalLock(hGlobal)
df.pFiles = Len(df)
'将DropFiles结构拷贝到内存中
Call CopyMem(ByVal lpGlobal, df, Len(df))
'将文件全路径名拷贝到分配的内存中。
Call CopyMem(ByVal (lpGlobal + Len(df)), ByVal data, _
Len(data))
Call GlobalUnlock(hGlobal)
'将数据拷贝到剪贴版上
If SetClipboardData(CF_HDROP, hGlobal) Then
clipCopyFiles = True
End If
End If
Call CloseClipboard
End If
End FunctionPublic Function clipPasteFiles(Files() As String) 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 tfStr As SHFILEOPSTRUCT
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)
'确定执行的操作类型为拷贝操作
tfStr.wFunc = FO_COPY
'目的路径设置为File1指定的路径
tfStr.pTo = Form1.File1.Path
For i = 0 To nFiles - 1
'根据获取的每一个文件执行文件拷贝操作
Call DragQueryFile(hDrop, i, filename, Len(filename))
Files(i) = TrimNull(filename)
tfStr.pFrom = Files(i)
SHFileOperation tfStr
Next i
Form1.File1.Refresh
Form1.Dir1.Refresh
Call CloseClipboard
End If
clipPasteFiles = nFiles
End If
End FunctionPrivate Function TrimNull(ByVal StrIn As String) As String
Dim nul As Long
nul = InStr(StrIn, vbNullChar)
Select Case nul
Case Is > 1
TrimNull = Left(StrIn, nul - 1)
Case 1
TrimNull = ""
Case 0
TrimNull = Trim(StrIn)
End Select
End Function好了,有了这些范例相信你也可以自己解决了。
http://community.csdn.net/Expert/topic/3020/3020237.xml?temp=.1840479以及到网上搜索一下一个老外写的vbExplore。
不过,这问题分还是太少:)