之前遇到怎么把剪贴板上的文件路径读出来的问题。即:在进行剪贴或者复制的时候,剪贴板上存储的是要剪贴或者复制的文件路径,如何从剪贴板上读到这个些路径信息,让我经历了一番周折,现在解决了,与大家一起分享一下。

 
  
  1. UINT uDropEffect = RegisterClipboardFormat(_T("Preferred DropEffect")); 
  2. UINT cFiles = 0; 
  3. DWORD dwEffect, *dw; 
  4. if ( OpenClipboard() ) 
  5.     HDROP hDrop = HDROP(GetClipboardData(CF_HDROP)); 
  6.     if (hDrop) 
  7.     { 
  8.         dw = (DWORD*)(GetClipboardData(uDropEffect)); 
  9.         if (NULL == dw ) 
  10.         { 
  11.              dwEffect = DROPEFFECT_COPY; 
  12.         } 
  13.         else 
  14.         { 
  15.              dwEffect = *dw; 
  16.         } 
  17.         cFiles = DragQueryFile(hDrop,(UINT)-1,NULL,0); 
  18.         TCHAR szFile[MAX_PATH]; 
  19.         for (UINT count = 0; count < cFiles; count++) 
  20.         { 
  21.              DragQueryFile(hDrop,count,szFile,sizeof(szFile)); 
  22.              strcat(szBuffer,szFile); 
  23.              //lstrcat(szBuffer,_T("\r\n")); 
  24.         } 
  25.         CloseClipboard(); 
  26.         if (dwEffect & DROPEFFECT_MOVE) 
  27.         { 
  28.               BOOL b = MoveFileEx(szBuffer,_T("D:\\"),TRUE); 
  29.               ::MessageBox(NULL,szBuffer,_T("Move Files"),MB_OK); 
  30.          } 
  31.          else if (dwEffect & DROPEFFECT_COPY) 
  32.          { 
  33.               BOOL bx = CopyFileEx(strFile,_T("D:\\").GetBuffer(),NULL,NULL,FALSE,COPY_FILE_FAIL_IF_EXISTS ); 
  34.               DWORD dwError = GetLastError(); 
  35.               ::MessageBox(NULL,szBuffer,_T("Copy Files"),MB_OK); 
  36.           } 
  37.      } 

上面的代码给出了如何获得剪贴板上的文件路径。如果是单个文件的话,实现了移动和复制的功能。如果是剪贴或者复制多个文件,需要处理一下就可以实现。

参考资料:http://www.cctry.com/thread-67916-1-1.html