操作剪切板的问题
- C/C++ code
char szFilePath[] = "c:\\1.exe";if(OpenClipboard(NULL)) { HANDLE hClip = GlobalAlloc(GMEM_ZEROINIT, strlen(szFilePath) + 1); char* lpData = (char*)GlobalLock(hClip); strcpy(lpData, szFilePath); GlobalUnlock(hClip); EmptyClipboard(); SetClipboardData(CF_HDROP, hClip); CloseClipboard(); }执行了这几句之后按ctrl+v后explorer就不响应了,求解。
调试了几次了,各个API的返回值都没什么问题
求大神指点!
[解决办法]
如何与资源管理器互动剪切/拷贝/粘贴文件
[解决办法]
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();
}
else
{
AfxMessageBox("打开剪切板失败");
}
}