C# Clipboard操作指南:读取与自定义序列化数据传输

Nora
Nora
发布时间:2026-10-13| 5人浏览过
原创

本文介绍如何在C#中操作Windows剪切板,包括注册窗口以实时获取剪切板更新、读取标准文本或图像数据,以及如何利用序列化机制存储和检索自定义数据类型。

核心原理与操作流程

在C#中操作剪切板通常涉及以下几个关键步骤:定义可序列化的数据格式、构建数据对象、写入剪切板以及从剪切板读取数据。为了实现更高级的交互(如实时监听),还需要结合Windows消息机制进行回调处理。

第1步:准备可序列化的数据结构

若需将自定义对象存入剪切板,该类必须标记为可序列化。使用 [Serializable] 属性即可满足此要求。如果类中存在不需要持久化或传输的字段,可使用 [NonSerialized()] 进行排除。

[Serializable]
public class MyItem
{
    public string ItemName { get; private set; }
    // 其他成员...
}

第2步:注册剪切板查看器以监听变化

为了让程序在用户复制其他内容时能实时检测到剪切板的变化,需要调用 user32.dll 中的 SetClipboardViewer API将当前窗口加入观察链。这允许接收 WM_DRAWCLIPBOARD 消息。

第3步:处理Windows消息并读取数据

重写窗口的 WndProc 方法来拦截消息。当收到 WM_DRAWCLIPBOARD 时,首先通过API传递消息给链中的下一个观察者,然后检查当前剪切板内容。

  • 检测文本: 使用 GetDataPresent(DataFormats.Text) 验证,并通过 GetData() 获取字符串。
  • 检测图像: 使用 Clipboard.GetImage() 直接获取 Bitmap 对象。
  • 检测自定义类型: 使用 typeof(MyItem).FullName 作为格式标识进行匹配。
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg == WM_DRAWCLIPBOARD)
    {
        // 传递消息以保持观察者链畅通
        SendMessage(NextClipHwnd, m.Msg, m.WParam, m.LParam);
        
        IDataObject iData = Clipboard.GetDataObject();
        
        // 示例:处理自定义对象
        if (iData.GetDataPresent(typeof(MyItem).FullName))
        {
            MyItem item = GetFromClipboard();
            if (item != null) UpdateUI(item);
        }
    }
    else
    {
        base.WndProc(ref m);
    }
}

第4步:写入自定义数据到剪切板

要将自定义对象复制到剪切板,需创建 DataObject 实例,并使用 SetData 方法指定格式名称和对象本身。最后调用 Clipboard.SetDataObject 提交数据。

public void CopyToClipboard()
{
    DataFormats.Format format = DataFormats.GetFormat(typeof(MyItem).FullName);
    IDataObject dataObj = new DataObject();
    dataObj.SetData(format.Name, false, this); // false表示不保持存活期
    Clipboard.SetDataObject(dataObj, false);
}

清理资源

在应用程序关闭时,务必调用 ChangeClipboardChain 从观察链中移除当前窗口,防止系统出现异常,并传递链变动消息。

以上就是C#操作Clipboard读取与写入剪切板中数据的详细内容,更多关于C#剪切板开发的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。