问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

将整个文件复制到剪贴板,注意是文件不是文本内容,麻烦用c++实现(最...

发布网友 发布时间:2022-05-07 13:01

我来回答

1个回答

热心网友 时间:2022-04-27 08:27

#include <string.h>
#include <windows.h>
#include <shlobj.h>

//复制文件到剪贴板
//没有加入错误判断,请自行修改
int CopyFileToClipboard(char szFileName[]);

int main()
{
CopyFileToClipboard("D:\\user.txt");

return 0;
}

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;

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;
}追问先谢谢你了,因为程序运行很成功,可以再给个注释吗?稍微解释一下,我可以给你加分,如果没兴趣的话,你回复下,我也把分给你了,谢谢!

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

可以搜索一下其中的一些字符串,可以得到更好更深入的理解。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
48v转换器12v,摩托车电启动能用吗 运城恒磁科技有限公司磁性材料的应用领域和市场简介 所住小区楼栋封了会不会变黄码 为什么有的地方结婚要给女方家彩礼? 都说男女平等,为什么男方还要给女方彩礼? 最近在抖音直播间看到关注的博主在推荐空刻意面,想知道口味如何呢? 结婚为什么要彩礼 为什么结婚要给彩礼 华为S8600自己刷了民间ROM,只要一连接网络就会立即跳出下载推荐应该的... 华为S8600刷机包ROM有哪些特色和改动? 华为S8600 超精版4.2ROM介绍 氢原子由一个质子(原子核)和一个核外电子组成.电子质量me=9.1×10-31kg,质子质量mp=1.67×10-27kg, c++中 double mst_cost(const int&,const double*,const double*);语句是否正确?? 老款帕萨特换过防冻液需要排气吗? spi cant creat gmem lock怎么解决 MFC图片加入 请问有人知道这女的叫什么吗? 帕萨特换完防冻液发动机抖动是什么原因 老款大众帕萨特防冻液加多少有影响吗? 为什么有中国有一段时间没有参加奥运会 波兰总理宣布不参加北京奥运会了吗?? 为什么梅西c罗等足球巨星参加世界杯不参加奥运会呢 哪些国家没有参加北京奥运会 德国为什么不参加北京奥运会? 如果国家队都不参加奥运会会有什么后果? 俄罗斯不参加奥运会 日本奥运会哪个国家不参加 朝鲜宣布不参加东京奥运会,他们不参加这次冬奥会是什么原因呢? 日本奥运会哪些国家不参加 羽生结弦为什么不参加奥运会? 狙击手枪法那么准,退役后为什么不参加奥运会? fourier-mellin C++实现图像之间的匹配,该怎么处理 C++读入图片 怎么显示Metafile类型的文件 类似于wmf-CSDN论坛 小孩在手机上怎么开发游戏 100%羊羔毛的衣服能水洗吗?洗时需要注意什么?时间长了会起球吗? 藤野先生中作者弃医从文的原因有两个,是什么? 藤野先生中为什么鲁迅要弃医从文 藤野先生弃医从文原因两件事 《藤野先生》中,鲁迅为什么要弃医从文?写出依据 《藤野先生》中作者弃医从文的原因是什么? 藤野先生里鲁迅为什么弃医从文 《朝花夕拾》藤野先生是什么促成了弃医学文转变(两件事)? 在《藤野先生》一文中,作者“弃医从文”的原因是( )和( )。表达了他( )情感? 在藤野先生一文中导致作者弃医从文的两个事件是什么,表达了他什么的感情? 藤野先生,为什么要弃医? 藤野先生是个怎样的人?作者对他怀有怎样的情感?鲁迅为什么弃医从文? 藤野先生一文中作者弃医从文表达了他怎样的感情? 藤野先生里的鲁迅是因为哪里两件事而弃医从文 在《藤野先生》文章中,作者是抱着什么目的去东京的?为什么又离开东京去了仙台?后来为何又弃医从文呢? 肝脏不好,通常是由生活中的哪些坏习惯造成的?