是否 Windows recycle/reuse 已注册剪贴板格式 ID

Does Windows recycle/reuse Registered Clipboard Format ids

问题

Windows 有一个 RegisterClipboardFormat 函数,returns 一个 id >0xC000 <0xFFFF 给出了该格式的名称。

如果格式已经注册,它将 return 与上次 return 相同的 ID。

由于只有 4k 个 ID 可用,如果许多应用程序请求唯一格式,它们最终可能需要重新使用格式。 windows 会释放格式 ID 以供重复使用吗?

为什么我关心

我想测试一下格式是否已经注册。不幸的是 Windows 没有为此提供功能(至少据我所知)。如果 windows 从不回收 ID,我可以只保留已注册格式的列表,而不必每次需要测试时都搜索所有 4K ID。

更新

到目前为止,我只是在一台计算机上检查了所有格式。 GetClipboardFormatName returned 0,格式错误代码 0x06:

所以我最初的猜测是 0x100 的所有倍数都在内部保留,并且确实存在某种回收,否则 0cC3AA 将不会免费。即将进行其他测试。

我认为它们会在重启时重置。即富文本格式今天会给你一个答案,继续使用那个值直到你重新启动,然后你会得到一个不同的数字。我最近没有测试过这个,但我很确定我过去做过一次,但可能是 20 年前了!

是的!

在尝试使用 GetClipboardFormatName 后,我发现 windows 7 将在第一个有效条目中注册新格式*。此外,有时格式** 未注册。那些未注册的句柄 ID 将成为未来格式的有效条目。

*0x100的倍数似乎从未注册过

**我无法确定取消注册格式的条件。