C# 模拟键盘
时间: 2025-05-21 10:41:45 浏览: 15
### C# 模拟键盘输入的实现方法
在 C# 中,可以通过 `System.Windows.Forms` 命名空间下的 `SendKeys` 类来实现模拟键盘输入的功能。以下是详细的说明以及代码示例。
#### SendKeys 的基本功能
`SendKeys` 是 .NET 提供的一个工具类,专门用于向活动窗口发送按键消息。它提供了两个主要方法:`Send()` 和 `SendWait()`[^1]。两者的区别在于:
- **`Send()` 方法**:立即发送按键消息而不等待其被处理。
- **`SendWait()` 方法**:发送按键消息并等待该消息被完全处理后再继续执行后续代码。
这种行为类似于 Windows API 中的 `PostMessage` 和 `SendMessage` 函数之间的差异。
#### 特殊字符的支持
除了普通的字母和数字外,`SendKeys` 还支持许多特殊字符和组合键。这些特殊字符通过大括号 `{}` 表示,例如 `{TAB}` 表示 Tab 键,具体对照表可参考 Microsoft MSDN 文档中的 `SendKeys Class` 页面[^1]。
#### 示例代码
下面是一个简单的代码示例,展示如何使用 `SendKeys.SendWait()` 来模拟键盘输入:
```csharp
using System;
using System.Threading;
using System.Windows.Forms;
class Program
{
static void Main()
{
// 确保目标应用程序处于前台
Console.WriteLine("请切换到目标应用程序...");
Thread.Sleep(3000);
// 发送字符串 "Hello World"
SendKeys.SendWait("Hello World");
// 按下回车键
SendKeys.SendWait("{ENTER}");
// 按下 Tab 键两次
SendKeys.SendWait("{TAB}");
SendKeys.SendWait("{TAB}");
// 输入带修饰符的快捷键 Ctrl+C (复制)
SendKeys.SendWait("^c");
}
}
```
此代码会在运行后暂停三秒钟以便用户切换至目标程序窗口,随后依次执行以下操作:
1. 向当前焦点控件输入文本 `"Hello World"`;
2. 模拟按下 Enter 键;
3. 模拟连续按压两次 Tab 键;
4. 模拟按下 Ctrl+C 组合键。
#### 注意事项
1. 如果需要更复杂的交互(如跨进程控制),可能还需要结合 P/Invoke 调用底层 Win32 API,比如 `keybd_event` 或者 `SendInput` 函数。
2. 使用 `SendKeys` 时需注意线程环境,默认情况下仅能在 GUI 应用程序主线程上调用成功;如果是在后台服务或者无界面环境中,则可能会失败。
---
###
阅读全文
相关推荐


















