见http://community.csdn.net/Expert/topic/3070/3070994.xml?temp=.396908

解决方案 »

  1.   

    问题内容我有一个ListView,显示了N多同一文件夹中的文件,我想实现与资源管理器之间的剪贴板交互。目前复制和粘贴都实现了,请问怎么实现剪切功能,也就是在ListView中剪切一个文件,也可以在资源管理器中粘贴,粘贴完成后,将该文件删除?
      

  2.   

    文件刪除可以直接用 kill 命令啊!也可以用filesystemobject.
      

  3.   

    回楼上,如果只是在自己的程序中运行剪切,那还挺好办。我只是想在Explore与自己写的程序中进行剪切交互,即在自己写的ListView中剪切一个文件或文件夹,然后再到Explore中进行粘贴,粘贴完成后删除文件夹,So..................没招了
      

  4.   

    可以考虑通过IContextMenu中的Invoke方法调用系统的cut方法。
      

  5.   

    回楼上:本来是想通过IContextMenu的,但是我显示的菜单是ActiveBar的,怎么样才能使我写一个方法调用系统的Cut方法呢?我这里有一段VC的代码,请帮我看看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();
    }
    }
      

  6.   

    实现:case IDC_CUT :
    case IDC_COPY :
    memset(szBuffer,0,4096*sizeof(TCHAR));
    GetWindowText(GetDlgItem(hWnd,IDC_FILES),szBuffer,4096);
    if(*szBuffer!=0) {
    //把文本筐中的文件名整理成要求的格式:"file1\0File2\0"
    memset(szFiles,0,4096*sizeof(TCHAR));
    lpFileStart=szFiles; //下个文件名存放位置指针
    lpStart=szBuffer;    //当前正在整理的文件名首地址
    lp=szBuffer;
    while(*lp!=0) {
    if(*lp=='\r') { //到达文件名末尾
    *lp=0;  //将回车符号换成0
    lstrcat(lpFileStart,lpStart);
    uLen=lstrlen(lpStart)+1;
    lpFileStart+=uLen;
    uTotalLen+=uLen;
    lp++;//跳过'\n'
    lpStart=lp+1;
    }
    lp++;
    }
    //Cut/Copy File
    if(LOWORD(wParam)==IDC_COPY)
    CutOrCopyFiles(szFiles,uTotalLen,TRUE);
    else CutOrCopyFiles(szFiles,uTotalLen,FALSE);
    }
    break;我已测试过,测试通过了,但就是不知道怎么改成VB的代码,按模画样,结果引起我的系统剪切版出问题了。谢谢
      

  7.   

    可以有你的e-mail吗?发短信息给我也行。我正在帮你写一个例子程序,
    不过现在要睡觉了,明天可以发给你。技术信息暂时保密! :)
      

  8.   

    James0001(See-Plus-Plus)已将我的邮件地址发送到信息中,请查收,谢谢
      

  9.   

    呵呵,这个,非常好实现,你剪切的时候,得到的是一个Path不就完了嘛,,不管是撤消剪切,还是进行剪切,都好办呀,
      

  10.   

    已经实现,感谢James0001(See-Plus-Plus),结贴