就是在本程序中按“复制”后,在资源管理器按“粘贴”就可粘贴到文件。
反过来,当资源管理器中按“复制”后,在本程序按“粘贴”就可得到实际文件名。另外一个难题,就是如何实现“剪切”的功能(双向)请各位指教,谢谢!

解决方案 »

  1.   

    http://www2.ccw.com.cn/tips/9906/062805_11.asp
      

  2.   

    to lc_mtt(柠檬)
    ==============================
    你听低级的嘛。还真看上分了,就算如此,这种问题你认为值多少分呀。呵呵。答题
    ============================
    其实在资源管理器所复制或剪切的不是整个文件,而是文件地址,在剪切板中
    可以直接访问到此信息,因为剪切板就像系统中的公共变量区域,任何程序都
    可以对其读写及清除。所以通过剪切板操作很容易达到你的目的。但是,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好了,有了这些范例相信你也可以自己解决了。
      

  3.   

    剪切处理太麻烦,我曾经试过剪切操作,真不太好处理,后来没有办法了,只有发送一下资源管理器的菜单消息来实现剪切了。建议看看
    http://community.csdn.net/Expert/topic/3020/3020237.xml?temp=.1840479以及到网上搜索一下一个老外写的vbExplore。
    不过,这问题分还是太少:)
      

  4.   

    告诉你一个网址:www.csdn.com.cn里面的技术专区里对这个问题做过深入讨论,你可以参考下.