91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# WinForm下剪貼板操作 API 應(yīng)用

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

在 Windows 桌面應(yīng)用開發(fā)中,剪貼板是一個(gè)非常有用的功能,它允許用戶在不同應(yīng)用程序之間復(fù)制和粘貼數(shù)據(jù)。在 WinForms 應(yīng)用程序中,我們可以通過調(diào)用 Win32 API 來實(shí)現(xiàn)剪貼板操作。本文將詳細(xì)介紹如何在 WinForms 中進(jìn)行剪貼板操作,并提供一個(gè)完整的示例。

引入命名空間

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

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

Win32 API 聲明

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

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

在代碼中聲明這些 API 函數(shù):

public class ClipboardAPI
{

    // 聲明 Win32 API 函數(shù)
    [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);

    // 定義數(shù)據(jù)格式
    publicconst uint CF_TEXT = 1;
}

復(fù)制文本到剪貼板

下面是一個(gè)將文本復(fù)制到剪貼板的方法:

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();
        }
    }
}

從剪貼板讀取文本

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

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

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

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

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

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

        // 關(guān)閉剪貼板
        CloseClipboard();
    }

    return result;
}

完整示例

接下來,我們將創(chuàng)建一個(gè)簡(jiǎn)單的 WinForms 應(yīng)用程序,包含一個(gè)文本框和兩個(gè)按鈕,分別用于復(fù)制和粘貼。

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))
            {
                // 獲取剪貼板數(shù)據(jù)
                IntPtr hGlobal = ClipboardAPI.GetClipboardData(ClipboardAPI.CF_TEXT);

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

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

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

                // 關(guān)閉剪貼板
                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();
                }
            }
        }
    }
}

?

總結(jié)

通過調(diào)用 Win32 API,我們能夠在 WinForms 應(yīng)用程序中實(shí)現(xiàn)剪貼板的操作。本文提供了將文本復(fù)制和粘貼到剪貼板的完整示例,展示了如何使用 Windows API 來進(jìn)行這些基本操作。這種方法可以為開發(fā)更復(fù)雜的剪貼板功能提供基礎(chǔ)。


閱讀原文:原文鏈接


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

主站蜘蛛池模板: 中文字幕日韩电影 | 国产三香港三韩国三 | 国产在线观看免费 | 日韩欧视频在 | 91丨熟女丨对白 | 91视频电影| 日韩影片中文字幕 | 欧美在线日韩在线 | 成人观看的视频三级 | 日韩欧美一二区 | 区水蜜桃在线观看 | 精品三级乱伦免费 | 国产日韩网址导航 | 欧美一级淫片 | 99re在线精品 | 97人人免费操 | 福利在线播放 | 午夜探花| 区三区在线观看 | 日韩高清一区二区 | 日韩免费精品视频 | 国产在线高清视频 | 国产最新看片在线 | 九九精品视| 精品二区 | 午夜激情视频 | 国产熟睡| 国产精品一二 | 91精品啪在线观看 | 国产欧美不卡 | 91视频这里只有 | 国产精品国产自线 | 日本一道高清视频 | 国产v亚洲v天堂 | 成人一区 | www亚洲欲色成 | 精品成免费视频9 | 人人影视 | 欧美性爱在线首页 | 欧美日韩成人免费 | 欧洲+亚洲+日韩 |