程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#對游戲手柄的編程開發-API篇(3)

C#對游戲手柄的編程開發-API篇(3)

編輯:關於C#

對游戲手柄的編程開發在上兩篇中,已講解完,在此篇中將講解對鍵盤的模擬。

對鍵盤的模擬,系統已提供了非常多的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號手柄模擬”按鈕。最小化程序後將鼠標焦點移動對您要玩的游戲上,您就 可以使用手柄玩游戲了。

本文附件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved