发布网友 发布时间:2022-05-07 13:01
共1个回答
热心网友 时间:2022-04-27 08:27
#include <string.h>追答int CopyFileToClipboard(char szFileName[])
{
UINT uDropEffect;
HGLOBAL hGblEffect;
LPDWORD lpdDropEffect;
DROPFILES stDrop;
HGLOBAL hGblFiles;
LPSTR lpData;
//与剪贴板交互的数据格式并非标准剪贴板格式,因此需要注册
uDropEffect = RegisterClipboardFormat("Preferred DropEffect");
//为剪贴板数据分配空间
hGblEffect = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE,sizeof(DWORD));
lpdDropEffect = (LPDWORD)GlobalLock(hGblEffect);
//设置操作的模式
*lpdDropEffect = DROPEFFECT_COPY;//复制; 剪贴则用DROPEFFECT_MOVE
GlobalUnlock(hGblEffect);
//剪贴板数据需要一个这个结构
stDrop.pFiles = sizeof(DROPFILES);//文件列表相对于结构的偏移量
stDrop.pt.x = 0;
stDrop.pt.y = 0;
stDrop.fNC = FALSE;
stDrop.fWide = FALSE;//宽字符设置
//分配数据空间,并且预留文件名的空间
//文件列表为两个'\0'结尾,因此需要多分配2个字节
hGblFiles = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE,\
sizeof(DROPFILES)+strlen(szFileName)+2);
lpData = (LPSTR)GlobalLock(hGblFiles);
memcpy(lpData,&stDrop,sizeof(DROPFILES));
strcpy(lpData+sizeof(DROPFILES),szFileName);
GlobalUnlock(hGblFiles);
//普通的剪贴板操作
OpenClipboard(NULL);
EmptyClipboard();
//设置剪贴板文件信息
SetClipboardData(CF_HDROP,hGblFiles);
//设置剪贴板操作信息
SetClipboardData(uDropEffect,hGblEffect);
CloseClipboard();
return 1;
}
可以搜索一下其中的一些字符串,可以得到更好更深入的理解。