Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#中的剪贴板历史记录中获取所有数据的列表?_C#_Clipboard_Clipboarddata - Fatal编程技术网

如何从C#中的剪贴板历史记录中获取所有数据的列表?

如何从C#中的剪贴板历史记录中获取所有数据的列表?,c#,clipboard,clipboarddata,C#,Clipboard,Clipboarddata,我想从剪贴板历史记录中获取所有数据的列表,但找不到枚举器方法。我会错过什么吗?或者我还能用什么方法来做呢?在剪贴板类中找不到枚举器方法 var clip = Clipboard.GetDataObject(); foreach (var item in clip) { MessageBox.Show(item); } 我能够通过将WinRT API中的剪贴板类引用到我的WPF应用程序中来获取剪贴板历史记录 using Clipboard = Windows.ApplicationMo

我想从剪贴板历史记录中获取所有数据的列表,但找不到枚举器方法。我会错过什么吗?或者我还能用什么方法来做呢?在剪贴板类中找不到枚举器方法

var clip = Clipboard.GetDataObject();

foreach (var item in clip)
{
    MessageBox.Show(item);
}

我能够通过将WinRT API中的剪贴板类引用到我的WPF应用程序中来获取剪贴板历史记录

using Clipboard = Windows.ApplicationModel.DataTransfer.Clipboard;

Task.Run(async () => {
    var items = await Clipboard.GetHistoryItemsAsync();
    foreach (var item in items.Items)
    {
        string data = await item.Content.GetTextAsync();
        MessageBox.Show(data);
    }
});
我还必须使用TFM版本将我的目标框架设置为.NET5.0,并且不需要任何NuGet软件包。您需要在早期版本的.NET上安装NuGet包

<TargetFramework>net5.0-windows10.0.19041.0</TargetFramework>
net5.0-windows10.0.19041.0

我不知道剪贴板历史是如何工作的,但是
Clipboard
类是传统Windows
IDataObject
剪贴板实现的一个相当薄的包装器。当程序将某个内容放在剪贴板上时,它可以包含一个或多个剪贴板格式(例如,Excel可以将复制的数据作为文本、表格、Excel特定对象以及一个或多个格式的图像放在剪贴板上)。剪贴板的使用者可以查询格式并决定哪种格式最有意义。执行
Clipboard.GetText
很容易,如果您想处理其他格式,更重要的是调用IDataObject的
GetFormats(false)
方法,然后将该集合用作枚举器,检索它包含的所有格式的数据(
IDataObject.GetData(string,bool)
)。这是一段漫长的旅程…@Flydog57我见过一些关于如何处理多种格式的示例,但是
GetText
只返回最后一个复制的项目,而不是列表。您是指Windows 10中的剪贴板历史记录(
WIN+V
,启用时)?您需要WinRT API来访问这些对象(以托管方式)。