gpt4 book ai didi

windows - 清理私有(private)剪贴板格式

转载 作者:可可西里 更新时间:2023-11-01 10:46:48 24 4
gpt4 key购买 nike

当应用程序以私有(private)格式(CF_PRIVATEFIRSTCF_PRIVATELAST)将数据放在剪贴板上时,它必须释放它以响应 WM_DESTROYCLIPBOARD,因为对于这些格式,系统不会自动执行。

  1. 从逻辑上讲,一个应用程序使用的私有(private)格式不会被任何其他应用程序看到(即使它们在私有(private)范围内使用相同的格式代码)。

    a) 系统如何执行此操作?它是否使用剪贴板所有者(窗口句柄)?

    b) 当所有者窗口关闭时,私有(private)格式项目是否会自动从剪贴板中删除? (使用剪贴板查看器似乎没有。)那么当窗口句柄被重用时会发生什么?

  2. 除了响应 WM_DESTROYCLIPBOARD 释放内存外,是否还需要在应用程序退出时释放内存? (我知道剪贴板使用全局内存,因此可以从任何进程访问数据,所以我猜它不会在创建它的进程退出时自动释放。)

  3. 理想情况下,当应用程序退出时,您应该只删除私有(private)格式并保留任何标准格式,但我找不到 API 调用来仅从剪贴板中删除一种格式。除了清空剪贴板然后显式写回非私有(private)格式之外,是否有一种简单的方法可以做到这一点?

我已经搜索了 MSDN 文档和 Google,但找不到这些问题的答案,所以这里的任何人都可以提供帮助吗?

(我知道注册的剪贴板格式。我不是问那些。)

最佳答案

非权威答案,但可以指导你测试判断真假:

  1. 我认为与 SetClipboardData 的文档相反当使用私有(private)格式时,所传递句柄的内存所有权不会授予系统。因此,任何其他试图读取剪贴板的程序都将获得它无法读取的数据的句柄。测试:您的剪贴板查看器是否真的可以检索私有(private)数据,或者只是句柄?
  2. 我相信您应该释放的内存是您在调用 SetClipboardData 时引用的您自己的应用程序内存。因此,您不需要在应用程序退出时释放内存,因为它应该与剩余内存一起释放。
  3. 私有(private)格式将指向不再存在的数据,类似于在收到 WM_RENDERALLFORMATS 消息时未呈现的延迟呈现数据。

关于windows - 清理私有(private)剪贴板格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21044644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com