首页 > 解决方案 > 如何在 C# 中将多个项目复制到剪贴板历史记录?

问题描述

我正在使用 Win API ( Windows.ApplicationModel.DataTransfer.Clipboard) 中的剪贴板类。当我尝试将多个项目一一复制到剪贴板历史记录时,它会被最近的项目覆盖。我想将我复制的每个项目存储到剪贴板历史记录中。我的剪贴板历史记录已启用,我尝试使用剪贴板中的所有设置方法,包括SetText来自 ( System.Windows.Clipboard) 的方法,所有这些方法都会覆盖而不是添加到历史记录中。

    private void UpdateClipboardOnProfileDropDownClosed(object sender, EventArgs e)
    {
        Clipboard.ClearHistory();
        using (var db = new LiteDatabase(Path.Combine(documents, "Auto Paste Clipboard", "data.db")))
        {
            var collection = db.GetCollection<ClipboardProfile>("clipboard");

            var clipboard = collection.FindOne(x => x.Profile == ProfileComboBox.Text);

            clipboard.Clipboard.Reverse();

            MessageBox.Show(clipboard.Clipboard.Count.ToString());
            foreach (var item in clipboard.Clipboard)
            {
                DataPackage data = new DataPackage
                {
                    RequestedOperation = DataPackageOperation.Copy
                };

                data.SetText(item);                          
                Clipboard.SetContent(data);
            }                                
        }
    }

标签: c#.net-coreuwpwindows-runtimeclipboarddata

解决方案


剪贴板历史记录需要一些延迟才能保存当前项目。因此,您可以尝试在添加项目时添加延迟。

请检查以下代码作为示例:

private async void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
    if(Clipboard.IsHistoryEnabled())
    {
        List<string> lists=new List<string>{ "1","2","3","4","5","6","7","8","9","10"}; 
        foreach(var item in lists)
        {
            DataPackage dataPackage = new DataPackage();
            dataPackage.SetText(item);
            Clipboard.SetContent(dataPackage);
            await Task.Delay(250);
        }
    }
}

注意,如果这些项目没有全部添加,您可以增加延迟时间。


推荐阅读