获取在Windows 资源管理器中执行COPY/PASTE的文件列表信息

来源:互联网 发布:淘宝知我药妆是正品吗 编辑:程序博客网 时间:2024/05/29 14:26

在文件传输模块开发过程中,要实现这样的一个功能:在资源管理器中对选中的文件或者文件夹CTRL+C,在聊天窗口中按下CTRL+V,获取用户选择的文件或文件夹发送给对端用户。这其中存在一个问题:如何从剪切板数据中获取用户选择了哪些文件或文件夹呢?经研究和测试,用如下的代码可以获取到文件列表信息:

    if( ::OpenClipboard( NULL ) ) // 打开剪切板     {       HDROP hDrop = HDROP( ::GetClipboardData( CF_HDROP ) ); // 获取剪切板中复制的文件列表相关句柄        if( hDrop != NULL ) {char szFilePathName[MAX_PATH+1] = {0};UINT nNumOfFiles = DragQueryFile( hDrop, 0xFFFFFFFF, NULL, 0 ); // 得到文件个数// 考虑到用户可能同时选中了多个对象(可能既包含文件也包含文件夹),所以要循环处理for ( UINT nIndex=0 ; nIndex<nNumOfFiles; ++nIndex ){memset( szFilePathName, 0, MAX_PATH+1 );DragQueryFile( hDrop, nIndex, szFilePathName, MAX_PATH );  // 得到文件名}}        ::CloseClipboard(); // 关闭剪切板      }