C#获取用户复制的文本
时间: 2024-09-08 12:01:18 浏览: 108
在C#中,要获取用户复制的文本,通常需要监听键盘事件或者使用剪贴板API。你可以创建一个`ClipboardWatcher`类来监视剪贴板的变化。以下是一个简单的示例:
```csharp
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class ClipboardWatcher : MarshalByRefObject
{
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, ref COPYDATASTRUCT lParam);
public event EventHandler TextCopied;
private const uint WM_COPYDATA = 0x004A;
private const string COPYDATASTRUCT_FORMAT = "TEXT";
[StructLayout(LayoutKind.Sequential)]
private struct COPYDATASTRUCT
{
public IntPtr dwData;
public uint cbData;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16384)]
public string lpData;
}
public void StartWatching()
{
// 创建剪贴板数据结构
var copyData = new COPYDATASTRUCT();
copyData.dwData = IntPtr.Zero; // 使用零值表示复制的数据
copyData.lpData = String.Empty;
// 注册剪贴板改变事件处理器
Application.Idle += (sender, args) =>
{
if (Clipboard.ContainsText())
{
copyData.cbData = (uint)Clipboard.GetText(COPYDATASTRUCT_FORMAT).Length;
SendMessage(IntPtr.Zero, WM_COPYDATA, IntPtr.Zero, ref copyData);
OnTextCopied();
}
};
}
protected virtual void OnTextCopied()
{
TextCopied?.Invoke(this, EventArgs.Empty);
}
}
// 使用示例
ClipboardWatcher watcher = new ClipboardWatcher();
watcher.TextCopied += (sender, e) => Console.WriteLine($"User copied: {Clipboard.GetText()}");
watcher.StartWatching();
```
在这个例子中,当剪贴板内容发生变化时,会触发`TextCopied`事件,你可以在订阅这个事件的地方处理复制的文本。
注意,这个方法在Windows环境中有效,对于跨平台或纯命令行应用,可能需要其他解决方案。
阅读全文