【问题标题】:Bypass Clipboard History in the Windows 10 October 2018 Update绕过 Windows 2018 年 10 月 10 日更新中的剪贴板历史记录
【发布时间】:2018-11-07 13:18:05
【问题描述】:

我们有一个 C++ 应用,它大量使用剪贴板 API OpenClipboard 等。

应用经常保存剪贴板的内容,插入内容,粘贴然后恢复剪贴板。

随着 Windows 10 十月更新,这会导致大量剪贴板历史记录也可能在设备之间同步。

是否有新的api 可以绕过新的剪贴板历史记录?

【问题讨论】:

  • 操作系统未针对违规者进行优化。不要滥用剪贴板,以后不会有任何东西需要清理。使用剪贴板的指导很简单:仅在用户主动请求您的应用程序粘贴数据时才使用它。
  • 天哪,人们在这里做出如此迅速的判断 - 该应用程序使用户能够为文本(包括 html 和 rtf)创建快捷方式.. 当用户触发快捷方式时,它会被复制到剪贴板中,然后粘贴到活动窗口中 - 全部在用户控制之下,他们完全了解正在发生的事情。为什么人们经常判断某事而不是简单地回答问题?
  • @IInspectable 我没有问我应该使用什么技术来解决特定问题。我无法理解您如何声称知道我的应用程序为什么会以这种方式运行。为什么这里有些人打算做出判断(不知道您不需要回答问题的全貌)而不是简单地回答问题???
  • 实际上我没有做错 - 你指的是不同的问题 我不能使用 UI 自动化的众多原因之一是因为接收应用程序(任何接受粘贴的应用程序)需要能够从剪贴板上显示的各种格式(纯文本、图像、rtf、html)等中自行选择。所有这些都需要对接收客户端可用..除非我弄错了,否则没有 api 可以让我与外部应用程序通信并为其提供一些数据,并让它告诉我它想要该数据的格式!说得够多了。
  • 查看github.com/dlech/KeePass2.x 可能会有所帮助,KeePass 实现了历史记录中不包含的选项,他们在 C# 中使用 Windows.ApplicationModel.DataTransfer 中的 ClipboardContentOptions,应该可以在 C++ 中使用也是。

标签: c++ winapi


【解决方案1】:

终于找到了一种方法——得到了微软的支持,最后记录在这里:Cloud Clipboard and Clipboard History Formats

您需要先获取几个格式 ID

UINT clipboardHistoryFormat_ = RegisterClipboardFormat(L"CanIncludeInClipboardHistory");
UINT cloudClipboardFormat_ = RegisterClipboardFormat(L"CanUploadToCloudClipboard");

然后,当您在剪贴板中写入 Windows 10 历史记录或云中不需要的任何内容时,您还需要将上述格式设置为 DWORD 值为 0

auto number_of_bytes = sizeof(DWORD);
auto hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, number_of_bytes);
if (hMem != nullptr)
{
    if (SetClipboardData(clipboardHistoryFormat_, hMem) == nullptr)
    {
        // something went wrong
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2019-09-08
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多