前兩篇完成手柄訊號擷取,本篇實作將手柄按鍵轉換為鍵盤事件,達成以手柄玩鍵盤遊戲的目標。核心 API 為 user32.dll 的 keybd_event。
/// 模擬鍵盤事件
/// 虛擬鍵碼
/// 掃描碼
/// 旗標
/// 額外資訊
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
System.Windows.Forms.Keys 列舉值。| 常數 | 說明 |
|---|---|
| KEYEVENTF_KEYDOWN | KeyDown 事件 (按下) |
| KEYEVENTF_EXTENDEDKEY | 擴展鍵碼 |
| KEYEVENTF_KEYUP | KeyUp 事件 (釋放) |
/// 鍵盤事件旗標列舉
[Flags]
public enum KeyboardEvents
{
None = 0x0,
KeyDown = 0x1,
KeyUp = 0x2
}
/// 發送鍵盤事件
/// 虛擬鍵碼
/// 事件組合
public static void SendKeyEvent(Keys key, KeyboardEvents events)
{
const uint KEYEVENTF_KEYDOWN = 0x0000;
const uint KEYEVENTF_KEYUP = 0x0002;
if ((events & KeyboardEvents.KeyDown) == KeyboardEvents.KeyDown)
keybd_event((byte)key, 0, KEYEVENTF_KEYDOWN, 0);
if ((events & KeyboardEvents.KeyUp) == KeyboardEvents.KeyUp)
keybd_event((byte)key, 0, KEYEVENTF_KEYUP, 0);
}
SendKeyEvent(Keys.A, KeyboardEvents.KeyDown)SendKeyEvent(Keys.A, KeyboardEvents.KeyDown | KeyboardEvents.KeyUp)配合第 2 篇的手柄 KeyDown、KeyUp 事件處理,即可完成「手柄按鍵 → 鍵盤模擬」完整鏈路。

完整原始碼請下載本文附件。類似成品工具網路上已有現成軟體(如日本開發的 JoyToKey)。