LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# WinForm下剪貼板操作 API 應用

admin
2025年5月30日 23:37 本文熱度 251

在 Windows 桌面應用開發中,剪貼板是一個非常有用的功能,它允許用戶在不同應用程序之間復制和粘貼數據。在 WinForms 應用程序中,我們可以通過調用 Win32 API 來實現剪貼板操作。本文將詳細介紹如何在 WinForms 中進行剪貼板操作,并提供一個完整的示例。

引入命名空間

在開始之前,我們需要引用一些必要的命名空間:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

Win32 API 聲明

我們將使用一些 Win32 API 函數來訪問剪貼板,這些函數包括:

  • OpenClipboard
  • CloseClipboard
  • EmptyClipboard
  • SetClipboardData
  • GetClipboardData
  • GlobalAlloc
  • GlobalLock
  • GlobalUnlock

在代碼中聲明這些 API 函數:

public class ClipboardAPI
{

    // 聲明 Win32 API 函數
    [DllImport("user32.dll")]
    public static extern bool OpenClipboard(IntPtr hWnd);

    [DllImport("user32.dll")]
    public static extern bool CloseClipboard();

    [DllImport("user32.dll")]
    public static extern bool EmptyClipboard();

    [DllImport("user32.dll")]
    public static extern IntPtr SetClipboardData(uint uFormat, IntPtr hMem);

    [DllImport("user32.dll")]
    public static extern IntPtr GetClipboardData(uint uFormat);

    [DllImport("kernel32.dll")]
    public static extern IntPtr GlobalAlloc(uint uFlags, UIntPtr dwBytes);

    [DllImport("kernel32.dll")]
    public static extern IntPtr GlobalLock(IntPtr hMem);

    [DllImport("kernel32.dll")]
    public static extern bool GlobalUnlock(IntPtr hMem);

    // 定義數據格式
    publicconst uint CF_TEXT = 1;
}

復制文本到剪貼板

下面是一個將文本復制到剪貼板的方法:

public void CopyToClipboard(string text)
{
    // 打開剪貼板
    if (ClipboardAPI.OpenClipboard(IntPtr.Zero))
    {
        // 清空剪貼板
        ClipboardAPI.EmptyClipboard();

        IntPtr hGlobal = ClipboardAPI.GlobalAlloc(0, (UIntPtr)((text.Length + 1) * 2)); 
        if (hGlobal != IntPtr.Zero)
        {
            IntPtr pGlobal = ClipboardAPI.GlobalLock(hGlobal);
            Marshal.Copy(text.ToCharArray(), 0, pGlobal, text.Length);
            Marshal.WriteInt16(pGlobal, text.Length * 20); 
            ClipboardAPI.GlobalUnlock(hGlobal);
            ClipboardAPI.SetClipboardData(13, hGlobal);
            ClipboardAPI.CloseClipboard();
        }
    }
}

從剪貼板讀取文本

下面是一個從剪貼板讀取文本的方法:

public static string PasteFromClipboard()
{
    string result = string.Empty;

    // 打開剪貼板
    if (OpenClipboard(IntPtr.Zero))
    {
        // 獲取剪貼板數據
        IntPtr hGlobal = GetClipboardData(ClipboardAPI.CF_TEXT);

        if (hGlobal != IntPtr.Zero)
        {
            // 鎖定全局內存
            IntPtr pGlobal = ClipboardAPI.GlobalLock(hGlobal);

            // 讀取文本
            result = Marshal.PtrToStringAnsi(pGlobal);

            // 解鎖全局內存
            ClipboardAPI.GlobalUnlock(hGlobal);
        }

        // 關閉剪貼板
        CloseClipboard();
    }

    return result;
}

完整示例

接下來,我們將創建一個簡單的 WinForms 應用程序,包含一個文本框和兩個按鈕,分別用于復制和粘貼。

using System.Runtime.InteropServices;

namespace AppCopyToClipboardApi
{
    public partial class Form1 : Form
    {
        public Form1()
        
{
            InitializeComponent();
        }

        private void btnCopy_Click(object sender, EventArgs e)
        
{
            CopyToClipboard(txt.Text);
        }

        private void btnPaste_Click(object sender, EventArgs e)
        
{
            txt.Text = PasteFromClipboard();
        }

        public string PasteFromClipboard()
        
{
            string result = string.Empty;

            // 打開剪貼板
            if (ClipboardAPI.OpenClipboard(IntPtr.Zero))
            {
                // 獲取剪貼板數據
                IntPtr hGlobal = ClipboardAPI.GetClipboardData(ClipboardAPI.CF_TEXT);

                if (hGlobal != IntPtr.Zero)
                {
                    // 鎖定全局內存
                    IntPtr pGlobal = ClipboardAPI.GlobalLock(hGlobal);

                    // 讀取文本
                    result = Marshal.PtrToStringAnsi(pGlobal);

                    // 解鎖全局內存
                    ClipboardAPI.GlobalUnlock(hGlobal);
                }

                // 關閉剪貼板
                ClipboardAPI.CloseClipboard();
            }

            return result;
        }

        public void CopyToClipboard(string text)
        
{
            // 打開剪貼板
            if (ClipboardAPI.OpenClipboard(IntPtr.Zero))
            {
                // 清空剪貼板
                ClipboardAPI.EmptyClipboard();

                IntPtr hGlobal = ClipboardAPI.GlobalAlloc(0, (UIntPtr)((text.Length + 1) * 2)); 
                if (hGlobal != IntPtr.Zero)
                {
                    IntPtr pGlobal = ClipboardAPI.GlobalLock(hGlobal);
                    Marshal.Copy(text.ToCharArray(), 0, pGlobal, text.Length);
                    Marshal.WriteInt16(pGlobal, text.Length * 20); 
                    ClipboardAPI.GlobalUnlock(hGlobal);
                    ClipboardAPI.SetClipboardData(13, hGlobal);
                    ClipboardAPI.CloseClipboard();
                }
            }
        }
    }
}

?

總結

通過調用 Win32 API,我們能夠在 WinForms 應用程序中實現剪貼板的操作。本文提供了將文本復制和粘貼到剪貼板的完整示例,展示了如何使用 Windows API 來進行這些基本操作。這種方法可以為開發更復雜的剪貼板功能提供基礎。


閱讀原文:原文鏈接


該文章在 2025/6/2 13:02:11 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
久久免费国产AⅤ网 | 天堂亚洲AⅤ在线观看 | 亚洲欧洲日本综合久久 | 色婷婷AⅤ一区二区三区 | 亚洲欧美卡通在线一区 | 亚洲天天做夜夜做天天欢人人 |