首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 系統剪貼簿操作封裝:純文字讀寫與異常處理

     編輯:關於C#

ClipboardHandler 靜態類別

封裝 System.Windows.Forms.Clipboard,提供安全的純文字存取,自動處理 COM 例外與資料格式檢查。

完整原始碼

using System;
using System.Windows.Forms;

public static class ClipboardHandler
{
    /// 剪貼簿是否包含 Unicode 文字
    public static bool CanGetText()
    {
        try
        {
            IDataObject data = Clipboard.GetDataObject();
            return data != null && data.GetDataPresent(DataFormats.UnicodeText);
        }
        catch
        {
            return false;
        }
    }

    /// 設定剪貼簿文字(Unicode),成功回傳 true
    public static bool SetTextToClipboard(string text)
    {
        if (string.IsNullOrEmpty(text)) return false;
        try
        {
            var dataObj = new DataObject();
            dataObj.SetData(DataFormats.UnicodeText, true, text);
            Clipboard.SetDataObject(dataObj, true); // true = 複本保留於剪貼簿
            return true;
        }
        catch
        {
            return false;
        }
    }

    /// 取得剪貼簿文字,失敗回傳 null
    public static string GetTextFromClipboard()
    {
        try
        {
            IDataObject data = Clipboard.GetDataObject();
            if (data.GetDataPresent(DataFormats.UnicodeText))
                return (string)data.GetData(DataFormats.UnicodeText);
        }
        catch { }
        return null;
    }
}

使用範例

// 寫入
if (ClipboardHandler.SetTextToClipboard("Hello, Clipboard!"))
    Console.WriteLine("寫入成功");

// 讀取
if (ClipboardHandler.CanGetText())
{
    string text = ClipboardHandler.GetTextFromClipboard();
    Console.WriteLine("讀取: " + text);
}

關鍵細節說明

細節說明
DataFormats.UnicodeText優先使用 Unicode 格式,避免 ANSI 編碼亂碼
SetData(..., true, text)第二參數 autoConvert=true,允許自動轉換相容格式
SetDataObject(obj, true)第二參數 copy=true,應用程式結束後資料仍保留在剪貼簿
try-catch 包裹Clipboard 操作易拋 ExternalException / ThreadStateException,全捕獲轉為失敗回傳
STAThread呼叫執行緒必須標記 [STAThread](WinForms/WPF 預設滿足)

擴充建議

  • 支援 DataFormats.Html、DataFormats.Rtf、DataFormats.FileDrop 等格式。
  • 加入重試機制(Thread.Sleep(10) + retry 3 次)應對偶發佔用衝突。
  • WPF 專案請改用 System.Windows.Clipboard,API 類似但命名空間不同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved