windows复制文件到剪贴板

转载记录:将整个文件复将整个文件复制到剪贴板,注意是文件不是文本内容,麻烦用c++实现(最好可以别用MFC),谢谢了!_百度知道将整个文件复

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;
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值