如何将文件放置到剪贴板里,以便在资源管理器或者其它地方进行粘贴?
我这里有一个子程序,可是有些时候行不通: Public Function clipCopyFiles(Files() As String) As Boolean
Dim data As String, df As DROPFILES, hGlobal As Long, lpGlobal As Long, i As Long
'清除剪贴板中现存的数据
If OpenClipboard(0&) Then
Call EmptyClipboard
data = data & vbNullChar
For i = LBound(Files) To UBound(Files)
data = data & Files(i) & vbNullChar
Next i
'为剪贴板拷贝操作分配相应大小的内存
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
Call CloseClipboard
End If
End Function请问高手:有没有其它可以解决该问题的办法?
完全解决的话再加分……
顶上也给分……
我这里有一个子程序,可是有些时候行不通: Public Function clipCopyFiles(Files() As String) As Boolean
Dim data As String, df As DROPFILES, hGlobal As Long, lpGlobal As Long, i As Long
'清除剪贴板中现存的数据
If OpenClipboard(0&) Then
Call EmptyClipboard
data = data & vbNullChar
For i = LBound(Files) To UBound(Files)
data = data & Files(i) & vbNullChar
Next i
'为剪贴板拷贝操作分配相应大小的内存
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
Call CloseClipboard
End If
End Function请问高手:有没有其它可以解决该问题的办法?
完全解决的话再加分……
顶上也给分……
的代码我早就试过了,行不通!
不过你说的可能有程序对剪贴板进行监视,这倒是的……我试着关闭那个剪贴板软件 试试……
用WINDOWS外殼編程嘛。
MsgBox "There was an error while pasting the bitmap to the clipboard!"
End If
'Close the clipboard
CloseClipboard
使用IsClipboardFormatAvailableAPI看看,有数据没有?
【VB声明】
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long【别名】
GetShortPathNameA【说明】
获取指定文件的短路径名 【返回值】
Long,装载到lpszShortPath缓冲区的字符数量。如lpszShortPath的长度不足,不能容下文件名,就返回需要的缓冲区长度 【参数表】
lpszLongPath --- String,指定欲获取短路径名的那个文件的名字。可以是个完整路径,或者由当前目录决定 lpszShortPath -- String,指定一个缓冲区,用于装载文件的短路径和文件名 cchBuffer ------ Long,lpszShortPath缓冲区长度例子:
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal lBuffer As Long) As Long
Public Function GetShortPath(strFileName As String) As String
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Dim lngRes As Long, strPath As String
'Create a buffer
strPath = String$(165, 0)
'retrieve the short pathname
lngRes = GetShortPathName(strFileName, strPath, 164)
'remove all unnecessary chr$(0)'s
GetShortPath = Left$(strPath, lngRes)
End Function
Private Sub Form_Load()
MsgBox GetShortPath("c:\Program Files\")
End Sub
如果文件名过长,则用rainstormmaster提供的方法获得8.3格式的文件名 ^-^
我的系统是XP_SP2的,不过我希望这个问题在任何系统里均可以!不知谁有现成的代码,适用于任何系统的!
当然我现在在我的软件里是使用“复制到……”解决了,不用剪贴板直接调用拷贝!但希望这个问题能找到答案。
http://www.codesky.net/article/doc/200309/2003090166217233.htm
一步步做完,还是不行的话,回帖