c – 如何从剪贴板中查找所有文件的名称
发布时间:2020-12-16 10:06:09 所属栏目:百科 来源:网络整理
导读:我刚刚创建了一个MFC应用程序来从剪贴板中查找文件名 AddClipboardFormatListener(AfxGetApp()-m_pMainWnd-m_hWnd);LRESULT Cfile_trackerDlg::WindowProc(UINT message,WPARAM wParam,LPARAM lParam){ switch(message) { case WM_CLIPBOARDUPDATE: { AfxBeg
我刚刚创建了一个MFC应用程序来从剪贴板中查找文件名
AddClipboardFormatListener(AfxGetApp()->m_pMainWnd->m_hWnd); LRESULT Cfile_trackerDlg::WindowProc(UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_CLIPBOARDUPDATE: { AfxBeginThread(FileArrival,NULL); break; } case WM_CHANGECBCHAIN: { AfxBeginThread(FileArrival,NULL); break; } } return CDialog::WindowProc(message,wParam,lParam); } UINT FileArrival(LPVOID param) { TCHAR lpszFileName[MAX_PATH]; char *szTime; time_t thistime; OpenClipboard(0); HGLOBAL hGlobal = (HGLOBAL)GetClipboardData(CF_HDROP); if (hGlobal) { HDROP hDrop = (HDROP)GlobalLock(hGlobal); if (hDrop) { time(&thistime); szTime = ctime(&thistime); DragQueryFile(hDrop,lpszFileName,MAX_PATH); WriteLog((char*)lpszFileName,1); GlobalUnlock(hGlobal); } CloseClipboard(); } return 0; } 当我们复制1个文件时,此代码工作正常,但是当我们复制多个文件时,它只显示第一个文件.是否有任何方法可以找出复制到剪贴板的所有文件名. 解决方法
您可以使用它来查找已删除的文件数:
UINT fileCount = DragQueryFile(hDrop,0xFFFFFFFF,nullptr,0); 使用此信息,您可以分配字符串数组并将每个文件名存储到数组中的字符串中: TCHAR** filenames; // other code . . . filenames = malloc(fileCount * sizeof(TCHAR*)); // other code . . . for (UINT i = 0; i < fileCount; ++i) { UINT filenameLength = DragQueryFile(hDrop,i,0); filenames[i] = malloc(filenameLength); DragQueryFile(hDrop,filenames[i],filenameLength); } 我从阅读documentation中得到了这一切. 编辑:要在此处使用C标准库(防止必须手动释放已分配的内存),您可以使用以下代码: std::vector<std::basic_string<TCHAR> > filenames(fileCount); // other code . . . for (UINT i = 0; i < fileCount; ++i) { UINT filenameLength = DragQueryFile(hDrop,0); filenames[i].reserve(filenameLength); DragQueryFile(hDrop,&(filenames[i][0]),filenameLength); // Uncomment the below line and comment the above line if you can use C++17 features // DragQueryFile(hDrop,filenames[i].data(),filenameLength); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |