對游戲手柄的編程開發在上兩篇中,已講解完,在此篇中將講解對鍵盤的模擬。
對鍵盤的模擬,系統已提供了非常多的API函數,在這裡就不一一講解了,只講解其中一個最簡單的 API函數 。
/// <summary>
/// 模擬鍵盤事件
/// </summary>
/// <param name="bVk">虛擬鍵值</param>
/// <param name="bScan"></param>
/// <param name="dwFlags"></param>
/// <param name="dwExtraInfo">附加鍵狀</param>
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
其中bVk可直接與System.Windows.Forms.Keys的值對應;dwFlags可為以下值的組合:
常數 說明 KEYEVENTF_KEYDOWN KeyDown事件 KEYEVENTF_EXTENDEDKEY 表明bScan為擴展鍵碼。 KEYEVENTF_KEYUP KeyUp事件為了方便對此API再進一步封裝:
/// <summary>
/// 鍵盤事件
/// </summary>
[Flags]
public enum KeyboardEvents
{
None = 0x0,
KeyDown = 0x1,
KeyUp = 0x2
}
/// <summary>
/// 發送鍵盤事件
/// </summary>
/// <param name="key"></param>
/// <param name="events">事件</param>
public static void SendKeyEvent(Keys key, KeyboardEvents events)
{
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);
}
比如我們要模擬按下A鍵則直接調用:SendKeyEvent(Keys.A, KeyboardEvents.KeyDown)。而要模擬按 下A鍵並彈起則為:SendKeyEvent(Keys.A, KeyboardEvents.KeyDown | KeyboardEvents.KeyUp)
到此,對鍵盤的模擬就基本完成了,配合第2篇中的游戲手柄的KeyDown,KeyUp事件(請參考源碼), 第1篇中所說的那個功能也就能實現出來了。
下面是實現出來的軟件界面截圖:
使用方法:分別設置好每個手柄的按鈕需要模擬的鍵盤鍵碼(將光標移動到對應的按鈕下面,直接點擊 鍵盤鍵即可),點擊“啟動1/2號手柄模擬”按鈕。最小化程序後將鼠標焦點移動對您要玩的游戲上,您就 可以使用手柄玩游戲了。
本文附件