我把一些数据放入剪贴板,在我从剪贴板复制数据后,我想清除数据而不清除整个剪贴板。
就像这样:
wchar_t* buf=NULL;
if( OpenClipboard(NULL)!=0)
{
HANDLE hData = GetClipboardData( CF_UNICODETEXT );
buf = (wchar_t*)GlobalLock( hData );
GlobalUnlock( hData );
CloseClipboard();
return buf;
}
//job is done, and now I want to clear only hData!
据我所知,EmptyClipboard()将清空所有内容!
先谢谢你了!
3条答案
按热度按时间but5z9lq1#
剪贴板一次只能保存一个
IDataObject
;该数据对象可以呈现多种数据格式,但它只是单个COM对象。唯一的方法是复制现有的数据对象(减去要删除的格式),并将其设置为剪贴板,以代替原始数据对象。ig9co6j12#
我在想你为什么要这么做。我不是Windows编程的Maven,但无论如何我都会尝试回答,因为在我看来,这个问题已经被留下了“孤儿”,我可能会提供一些见解(希望我没有犯大错)。
据我所知,剪贴板意味着保存 * 一个 * 实体的几个 * 替代 * 表示(以不同的格式)。
只删除 * 一个 * 这样的表示的用例是什么?我会说,有意义的是要么删除所有的表示(通过
EmptyClipboard()
),要么不删除。也许你认为剪贴板是用来保存不同类型的 * 几个实体 *,这就是为什么你正在寻找一个选择性删除。恐怕这是一种误解,并不能反映剪贴板的真实的用途。
c3frrgcw3#
我需要它,所以我编码它,“空,然后重新填充减去我想删除的”,崩溃的时候,真实的的InsideClipboard。exe没有崩溃,所以我一定是出了什么问题
https://github.com/FuPeiJiang/InsideClipboard.ah2
gui,不是库/函数
Ahkv 2,足够接近C
编辑:CF_BITMAP,CF_ENHMETAFILE,CF_PALETTE是HANDLE,不是内存地址,(崩溃的原因)
我需要一个GUI,但也许有人需要C代码,所以: