从剪贴板获取数据并重新设置 - WINAPI,C [重复]

Posted

技术标签:

【中文标题】从剪贴板获取数据并重新设置 - WINAPI,C [重复]【英文标题】:Getting data from the clipboard and setting it back again - WINAPI, C [duplicate] 【发布时间】:2021-12-14 17:12:24 【问题描述】:

我正在尝试保存剪贴板的当前值并稍后将其重新设置。

我正在使用GetClipboardData() 来获取剪贴板上的任何内容。但是,我需要知道剪贴板中当前存在哪种数据类型才能调用此函数。

是否有我可以使用的通用数据类型? 从剪贴板获取数据后,如何使用SetClipboardData() 函数进行设置?

【问题讨论】:

您假设剪贴板仅包含一种格式的数据。它可以同时包含所有格式的数据。你可以enumerate。 好的,但是如何删除添加到剪贴板的最后一个值并将其恢复到更改之前的状态? 一般来说,你不能。您必须完整复制剪贴板上的所有内容,然后擦除整个剪贴板,然后再次重新添加所有内容。对于所有各种可能的格式,包括自定义格式、延迟渲染、OLE 对象等,这并不容易。您所要求的实际上是一个非常复杂的任务,剪贴板并不是真正设计的。您真正想要完成什么? 这不相关。答案是“你不能”,无论使用何种编程语言都是如此。 @OmerFriedlander "我的程序正在使用剪贴板" - 究竟是为了什么目的? “我不希望它取代我目前在剪贴板中的内容” - 那么使用剪贴板不是解决您的问题的正确方法,不管是什么(您还没有解释) ." 在我的程序使用剪贴板完成后将其保存在剪贴板中并恢复它会不会太复杂" - 是的,实际上,它可能非常复杂,在某些情况下,甚至不可能做到这一点。 【参考方案1】:

剪贴板是一个共享资源。除了几乎不可能将其恢复到以前的状态之外,它还可能会干扰其他应用程序。

更好的选择是使用WM_COPYDATA 在您自己的程序中复制数据。

Windows 10 支持剪贴板历史记录,但我不知道从中删除最后一个条目的方法。

【讨论】:

不可以使用GetClipboardData()获取剪贴板中的最新值,然后使用EmptyClipboard()清空,最后使用SetClipboardData()设置我们之前保存的值使用 Get 函数? @OmerFriedlander 否。正如其他 cmets 指出的那样,剪贴板的所有者可以提供多种格式,并延迟渲染。您必须获得其中的ALL 以及相应的数据。如果paste 时的数据发生变化,这可能是不可能的,您将保存/恢复不同的数据集。 好的,知道了。谢谢大家帮助我!

以上是关于从剪贴板获取数据并重新设置 - WINAPI,C [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ip 地址或 sockaddr_in 结构 (C++/WinAPI) 中获取主机名?

如何使用 C WinAPI 获取当前麦克风输入电平?

C ++从Linux上的剪贴板获取字符串

C# WinAPI 从静态检查窗口文本

在纯 WinAPI 中从内存缓冲区播放声音

sh SH脚本截图并上传到Imgur(如果使用Snagit则从剪贴板获取)