C++ 使用OLE剪贴板和经典剪贴板时出现意外/奇怪的结果,还是我遗漏了什么?
我正在尝试以下技巧:C++ 使用OLE剪贴板和经典剪贴板时出现意外/奇怪的结果,还是我遗漏了什么?,c++,windows,winapi,clipboard,ole,C++,Windows,Winapi,Clipboard,Ole,我正在尝试以下技巧: 我需要将IDataObject*设置到剪贴板中,因此我使用OleSetClipboard()将其设置到剪贴板中 我有另一个CLIPFORMAT我想添加到剪贴板,但是我不能用OleSetClipboard()来做,因为我收到的IDataObject*没有实现SetData()方法。因此,为了克服这个限制,我使用GetClipboardOwner()打开剪贴板(),这样,我就可以SetClipboardData()到剪贴板,而不必先EmptyClipboard() 现在,这一切
IDataObject*
设置到剪贴板中,因此我使用OleSetClipboard()
将其设置到剪贴板中CLIPFORMAT
我想添加到剪贴板,但是我不能用OleSetClipboard()
来做,因为我收到的IDataObject*
没有实现SetData()
方法。因此,为了克服这个限制,我使用GetClipboardOwner()
打开剪贴板(),这样,我就可以SetClipboardData()
到剪贴板,而不必先EmptyClipboard()
olegetclipboarddata()
不会返回我使用SetClipboardData()
放在剪贴板中的数据,但我可以使用GetClipboardData()
我可以想象为什么会发生这种情况(它只返回IDataObject*
),因此我尝试OleFlushClipboard()
删除IDataObject*
,并再次尝试OleGetClipboard()
,让操作系统重新构建一个新的IDataObject*
,而且它仍然不包含SetClipboardData()
添加的CLIPFORMAT
有人知道如何克服这个问题吗?还是另一个把戏?或者解释为什么它是这样工作的?谢谢我刚刚在Windows 7上尝试了这个功能,它似乎可以工作,但只是跨进程:
- 在与剪贴板所有者不同的过程中,OleGetClipboard返回包含所有格式的数据对象(即数据对象的原始格式和添加到剪贴板的额外格式)
- 在同一过程中,OleGetClipboard始终返回不包含额外剪贴板格式的数据对象