【问题标题】:Advanced Clipboard - more data stored C#/Windows高级剪贴板 - 存储更多数据 C#/Windows
【发布时间】:2015-08-11 07:28:03
【问题描述】:

我必须编写一个程序来扩展我的 Windows 剪贴板并允许在复制/粘贴文件时存储更多数据。它必须像这样工作:我正在处理一个文件,并将其粘贴到例如 Outlook 中,它会将其识别为文件,这通常在您执行此操作时发生(剪贴板存储路径)。但是,当我将此文件粘贴到例如记事本时,我希望它粘贴文件名。

是否可以像这样扩展剪贴板?如有任何提示,我将不胜感激。

[编辑] FileDropList 仅包含具有完整文件名(路径)的字符串集合。我需要在其中存储更多数据。

【问题讨论】:

  • 您可以将文件名作为 CF_TEXT 放回剪贴板,记事本会粘贴它。但是使用可以处理这两种格式的应用程序,您将获得各种结果。有些会粘贴文件,有些会粘贴文本。
  • @Chris Thornton 你能解释一下如何将 FileDropList 和分配给它们的文本值放入剪贴板吗?

标签: c# windows clipboard


【解决方案1】:

要使用多种格式,您可以使用 DataObject 作为您的值的容器,如下所示:

设置

        var obj1 = new DataObject(DataFormats.Text,Yourobj.asText());
        Clipboard.SetDataObject(obj1);

        var obj2 = new DataObject(DataFormats.Html,Yourobj.asHtml());
        Clipboard.SetDataObject(obj2);

获取

        IDataObject data_object = Clipboard.GetDataObject();

        if (data_object.GetDataPresent(DataFormats.Html))
           var yourHTML =data_object.GetData(DataFormats.Html);

【讨论】:

  • 重点不是存储不同类型的对象,而是返回特定应用程序可以处理的类型。
  • @Niko 所以点 IS 来存储不同类型的对象,因为你怎么知道哪个应用程序需要哪种类型......以及用户何时试图过去对象在什么应用中
  • 所以我必须创建几个不同类型的对象,实际上代表同一个文件?但是文件路径和文件名都是字符串。在这种情况下,像记事本这样的简单应用程序会做什么?
  • @Niko DataObject 是一个 .Net 类,因此可以执行以下操作:Clipboard.SetDataObject(new DataObject(DataFormats.Text,Yourobj.getFilepath())); 唯一的问题是她的问题是 DataFormats 应用程序(例如 Outlook)是否期望执行您认为它应该执行的操作
  • 我知道,但是在剪贴板中我只能保留一个数据对象,不是吗?在这个概念中,我必须为一个文件保留一个 faw 对象(一个用于路径,一个用于名称等)和这些对象的对象,以防我想每次复制一个 faw 文件。
【解决方案2】:

我找到了以下解决方案:

可以将多个数据添加到 DataObject,但它们需要是不同的类型。因此,我添加了一个包含要复制的文件的列表和一个长字符串,其中我添加了以“\n”或“”分隔的文件名。

如果有人需要放几个相同类型的值可以定义自己的对象(类、结构)——必须序列化! - 把你的价值观放在那里。不幸的是,这个对象只能被您的应用识别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多