You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET 6与C#环境下获取剪贴板文本遇问题求助

解决方法

1. 确保STA线程标记

剪贴板操作必须在**STA(单线程单元)**线程中执行,.NET 6的WinForms项目默认入口可能缺少[STAThread]标记,这是导致代码失效的常见原因。

修改你的Program.cs文件:

using System;
using System.Windows.Forms;

namespace MyTests
{
    internal static class Program
    {
        [STAThread] // 必须添加该标记
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Application.Run(new Form1());
        }
    }
}

如果你的项目使用顶级语句格式,需要改为带类和Main方法的结构,并添加[STAThread]属性。

2. 确认命名空间引用

确保代码文件顶部引用了正确的命名空间:

using System.Windows.Forms;

3. 验证项目配置

你的csproj配置已包含<UseWindowsForms>true</UseWindowsForms>,这会自动引入Windows Forms相关框架依赖,无需额外安装NuGet包(.NET 6+中Windows Forms属于框架内置组件)。

4. 替代方案:直接调用Windows API

如果上述方法仍无法解决问题,可以通过P/Invoke直接调用系统剪贴板API,绕开WinForms依赖:

using System;
using System.Runtime.InteropServices;
using System.Text;

public static class ClipboardHelper
{
    [DllImport("user32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool OpenClipboard(IntPtr hWndNewOwner);

    [DllImport("user32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool CloseClipboard();

    [DllImport("user32.dll", SetLastError = true)]
    private static extern IntPtr GetClipboardData(uint uFormat);

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern IntPtr GlobalLock(IntPtr hMem);

    [DllImport("kernel32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool GlobalUnlock(IntPtr hMem);

    private const uint CF_UNICODETEXT = 13;

    public static string GetText()
    {
        string result = string.Empty;
        if (OpenClipboard(IntPtr.Zero))
        {
            IntPtr hData = GetClipboardData(CF_UNICODETEXT);
            if (hData != IntPtr.Zero)
            {
                IntPtr pData = GlobalLock(hData);
                if (pData != IntPtr.Zero)
                {
                    result = Marshal.PtrToStringUni(pData);
                    GlobalUnlock(hData);
                }
            }
            CloseClipboard();
        }
        return result;
    }
}

使用时直接调用:

string textFromClipBoard = ClipboardHelper.GetText();

内容的提问来源于stack exchange,提问作者Ken B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:03:27