WinRT 剪贴板历史是否仅支持文本和图像?

Does the WinRT Clipboard History only support text and images?

我正在制作一个使用 Window 10 剪贴板历史记录的 C++/WinRT 应用程序,但由于某些原因我只能抓取文本和图像。

我的代码有点像这样..

auto history = Clipboard::GetHistoryItemsAsync().get();

if (history.Status() == ClipboardHistoryItemsResultStatus::Success)
{
    auto historyItemList = history.Items();
    for (const auto& historyitem : historyItemList)
    {
        //Works
        if (dataPackageView.Contains(StandardDataFormats::Text()))
        {
            GetClipboardText(dataPackageView);
        }

        //Works
        if (dataPackageView.Contains(StandardDataFormats::Bitmap()))
        {
            GetClipboardBitmap(dataPackageView);
        }

        //Never triggers
        if (dataPackageView.Contains(StandardDataFormats::Html()))
        {
            GetClipboardHtml(dataPackageView);
        }
    
        //Never triggers
        if (dataPackageView.Contains(StandardDataFormats::StorageItems()))
        {
            GetClipboardStorageItems(dataPackageView);
        }
        //etc..

我想使用其他数据格式。 EG:对于 StorageItems,我希望我是从我的桌面 CTRL+C 一个项目,还是我用

以编程方式完成它
dataPackage.SetStorageItems({ std::begin(files), std::end(files) });    
Clipboard::SetContent(dataPackage);
Clipboard::Flush(); 

该文件最终会出现在剪贴板历史记录中,因此我可以像在第一个片段中那样处理它。但该文件从未出现在返回的 Clipboard::GetHistoryItemsAsync() 容器中。当您按 WIN+V 时,我在历史记录查看器中也看不到该文件。

所以我想知道的是;

编辑: 忘记补充了。当我以编程方式将 StorageItem 添加到剪贴板时,我也尝试如下所示。不知道为什么我不能向 IVector 添加字符串。

auto options = ClipboardContentOptions();

auto formats = Windows::Foundation::Collections::IVector<hstring>();

formats.Append(StandardDataFormats::StorageItems()); //Unhandled Exception

options.IsAllowedInHistory(true);
options.IsRoamable(true);
options.HistoryFormats() = formats;
options.RoamingFormats() = formats;


Clipboard::Clipboard::Clear();
Clipboard::SetContentWithOptions(dataPackage, options);
Clipboard::Flush();

据我尊敬的同事 Faywang - MSFT 观察,Windows'剪贴板历史记录和云剪贴板同步实现仅支持有限数量的剪贴板数据格式,这反映在 UWP 剪贴板中API 在 Windows 运行时 Clipboard class.

请务必记住,剪贴板历史记录支持哪些剪贴板格式不是剪贴板历史记录的合同细节。继续阅读时请记住这一点:

从 Windows 10 版本 2004(也称为 build 19041,也就是 2020 年 5 月更新)开始,剪贴板历史记录支持 StandardDataFormats 中定义的以下剪贴板数据格式:

  • 纯文本:StandardDataFormats.Text
  • 各种 URI 格式:StandardDataFormats.UriStandardDataFormats.WebLinkStandardDataFormats.ApplicationLink
  • HTML 剪贴板格式:StandardDataFormats.Html
  • 位图:StandardDataFormats.Bitmap

为了与 classic 桌面应用程序(又名 Win32 应用程序)兼容,剪贴板历史记录还支持一些名称不在 StandardDataFormats 中但 Windows 中的剪贴板数据格式当应用试图粘贴特定格式时,系统可以 auto-convert 往返于 above-listed StandardDataFormats 格式。

剪贴板历史记录不支持任何其他自定义或 well-known 剪贴板格式。


鉴于上述情况,我在您的结果中看到的唯一奇怪的事情是您的应用程序似乎没有读取 HTML 格式。我不知道这方面有任何 Windows 实施错误 - 尝试更多地修改您的代码,如果您仍然遇到问题,我绝对鼓励您 post 另一个问题,或联系以另一种方式(例如通过反馈中心)联系我们。

我确实注意到,从概念技术角度来看,缺少有关剪贴板历史记录的 Microsoft 文档。我还鼓励您针对剪贴板历史 记录的地方提出 GitHub 问题,例如 https://github.com/MicrosoftDocs/winrt-api - 我们一直在倾听。