WEB开发网
开发学院软件开发VC 如何与资源管理器互动剪切/拷贝/粘贴文件 阅读

如何与资源管理器互动剪切/拷贝/粘贴文件

 2010-07-15 20:45:16 来源:WEB开发网   
核心提示:现在我们就可以将上面两组数据放入剪贴板中了,注意在写数据前应先清空剪贴板,如何与资源管理器互动剪切/拷贝/粘贴文件(4),为了方便大家使用,下面我给出实现此功能的独立的函数:VOID CutOrCopyFiles(char * lpBuffer,UINT uBufLen,BOOL bCopy)lpBuffer是包括所有

现在我们就可以将上面两组数据放入剪贴板中了,注意在写数据前应先清空剪贴板。为了方便大家使用,下面我给出实现此功能的独立的函数:

VOID CutOrCopyFiles(char * lpBuffer,UINT uBufLen,BOOL bCopy)

lpBuffer是包括所有准备剪切/拷贝的文件名称的缓冲区;uBufLen是lpBuffer的长度;bCopy决定该操作是Copy还是Cut,TRUE为Copy,FALSE为Cut。例如我们可以这样调用该函数:

char szFiles[]="c:\\1.txt\0c:\\2.txt\0";
CutOrCopyFiles(szFiles,sizeof(szFiles),FALSE);

来剪切文件,或者使用:

CutOrCopyFiles(szFiles,sizeof(szFiles),TRUE);

来拷贝文件。

#include <Shellapi.h>
#include <Shlobj.h>
#include <oleidl.h>
......
VOID CutOrCopyFiles(char *lpBuffer,UINT uBufLen,BOOL bCopy)
{
  UINT uDropEffect;
  DROPFILES dropFiles;
  UINT uGblLen,uDropFilesLen;
  HGLOBAL hGblFiles,hGblEffect;
  char *szData,*szFileList;
  DWORD *dwDropEffect;
  uDropEffect=RegisterClipboardFormat("Preferred DropEffect");
  hGblEffect=GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,sizeof(DWORD));
  dwDropEffect=(DWORD*)GlobalLock(hGblEffect);
  if(bCopy)
    *dwDropEffect=DROPEFFECT_COPY;
  else
    *dwDropEffect=DROPEFFECT_MOVE;
  GlobalUnlock(hGblEffect);
  uDropFilesLen=sizeof(DROPFILES);
  dropFiles.pFiles =uDropFilesLen;
  dropFiles.pt.x=0;
  dropFiles.pt.y=0;
  dropFiles.fNC =FALSE;
  dropFiles.fWide =TRUE;
  uGblLen=uDropFilesLen+uBufLen*2+8;
  hGblFiles= GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, uGblLen);
  szData=(char*)GlobalLock(hGblFiles);
  memcpy(szData,(LPVOID)(&dropFiles),uDropFilesLen);
  szFileList=szData+uDropFilesLen;
  MultiByteToWideChar(CP_ACP,MB_COMPOSITE,
      lpBuffer,uBufLen,(WCHAR *)szFileList,uBufLen);

  GlobalUnlock(hGblFiles);
  if( OpenClipboard(NULL) )
  {
    EmptyClipboard();
    SetClipboardData( CF_HDROP, hGblFiles );
    SetClipboardData(uDropEffect,hGblEffect);
    CloseClipboard();
  }
}

希望以上内容对你有所帮助。

本文附上一个Demo工程,编译后生成CutCopy.exe程序,该程序的使用方法如下:

启动程序后,可使用Windows 资源管理器等程序剪切/拷贝文件,然后点程序中的[CheckClipboard],Demo程序将分析剪贴板中的内容,并弹出消息框告知是Copy Files还是Cut Files,并给出文件列表.用户点[OK]关闭消息框后,文件列表 将被放入文本框中,此时用户可以通过[Cut]/[Copy]按钮来改变剪贴板中的属性。

同时,用户可以通过[Browser]来选择若干文件到文本框中,然后点[Cut]/[Copy]进行操作,之后,用户既可以通过[CheckClipboard]检查剪贴板中的内容也可以通过在Windows 资源管理器等程序中进行粘贴(Paste)来检查其是否正确。

本文配套源码

上一页  1 2 3 4 

Tags:如何 资源管理 互动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接