核心 API
using System.Windows.Forms;
// 基本用法
SendKeys.Send("文字"); // 發送字串
SendKeys.SendWait("文字"); // 發送並等待處理完成
特殊字元鍵碼對照表 (Shift 組合)
| 字元 | SendKeys 代碼 | 備註 |
| + | +{=} | |
| ( | +9 | |
| * | +8 | |
| & | +7 | |
| ^ | +6 | |
| % | +5 | |
| $ | +4 | |
| # | +3 | |
| @ | +2 | |
| ! | +1 | |
| ) | +0 | |
| ~ | +` | 反引號鍵 |
常用功能鍵代碼對照表
| 按鍵 | 代碼 | 備註 |
| ← | {LEFT} | |
| → | {RIGHT} | |
| ↑ | {UP} | |
| ↓ | {DOWN} | |
| Home | {HOME} | |
| End | {END} | |
| Page Up | {PGUP} | |
| Page Down | {PGDN} | |
| Delete | {DEL} | |
| Backspace | {BACKSPACE} | 或 {BKSP} |
| Space | {SPACE} | |
| Insert | {INS} | |
| Tab | {TAB} | |
| Shift+Tab | {BACKTAB} | |
| Enter | {ENTER} | 或 ~ |
| F1-F12 | {F1} ~ {F12} | |
| Esc | {ESC} | |
修飾鍵組合語法
| 修飾鍵 | 前綴符號 | 範例 |
| Ctrl | ^ | ^c (Ctrl+C), ^{F1} (Ctrl+F1) |
| Shift | + | +{TAB} (Shift+Tab), +{F1} |
| Alt | % | %{F4} (Alt+F4), %f (Alt+F) |
組合鍵範例
// Ctrl + A (全選)
SendKeys.SendWait("^a");
// Ctrl + C (複製)
SendKeys.SendWait("^c");
// Alt + F4 (關閉視窗)
SendKeys.SendWait("%{F4}");
// Ctrl + Shift + Esc (工作管理員)
SendKeys.SendWait("^+{ESC}");
// 輸入 "Hello World" 並按 Enter
SendKeys.SendWait("Hello World{ENTER}");
實戰應用:自動化登入腳本
public void AutoLogin(string username, string password)
{
// 等待視窗啟動
Thread.Sleep(2000);
// 輸入用戶名
foreach (char c in username)
{
SendKeys.SendWait(c.ToString());
Thread.Sleep(10);
}
// Tab 切換到密碼欄
SendKeys.SendWait("{TAB}");
Thread.Sleep(100);
// 輸入密碼
foreach (char c in password)
{
SendKeys.SendWait(c.ToString());
Thread.Sleep(10);
}
// 送出
SendKeys.SendWait("{ENTER}");
}
限制與注意事項
- 目標應用程式必須為**前景視窗**且具備焦點
- UAC 提權視窗、安全桌面 (Ctrl+Alt+Del) 無法模擬
- DirectX 全螢幕遊戲通常攔截鍵盤訊息,需使用底層 Hook (如
SendInput API)
- 需參考
System.Windows.Forms.dll
- .NET Core/.NET 5+ 專案需啟用 Windows Forms 相容性
進階替代方案
- Windows Input Simulator (NuGet) - 封裝
SendInput API,支援更多場景
- UI Automation - 針對 WPF/Win32 控制項直接操作,不依賴鍵盤模擬
- Selenium / Playwright - 瀏覽器自動化專用