WEB开发网
开发学院软件开发C语言 C#对游戏手柄的编程开发-API篇(3) 阅读

C#对游戏手柄的编程开发-API篇(3)

 2009-03-29 08:22:04 来源:WEB开发网   
核心提示: 对游戏手柄的编程开发在上两篇中,已讲解完,C#对游戏手柄的编程开发-API篇(3),在此篇中将讲解对键盘的模拟,对键盘的模拟,点击“启动1/2号手柄模拟”按钮,最小化程序后将鼠标焦点移动对您要玩的游戏上,系统已提供了非常多的API函数,在这里就不一一讲解了

对游戏手柄的编程开发在上两篇中,已讲解完,在此篇中将讲解对键盘的模拟。

对键盘的模拟,系统已提供了非常多的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_KEYDOWNKeyDown事件
KEYEVENTF_EXTENDEDKEY表明bScan为扩展键码。
KEYEVENTF_KEYUPKeyUp事件

为了方便对此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篇中所说的那个功能也就能实现出来了。

下面是实现出来的软件界面截图:

C#对游戏手柄的编程开发-API篇(3)

使用方法:分别设置好每个手柄的按钮需要模拟的键盘键码(将光标移动到对应的按钮下面,直接点击键盘键即可),点击“启动1/2号手柄模拟”按钮。最小化程序后将鼠标焦点移动对您要玩的游戏上,您就可以使用手柄玩游戏了。

系列文章:

C#对游戏手柄的编程开发-API篇(1)

C#对游戏手柄的编程开发-API篇(2)

Tags:游戏 手柄 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接