Welcome

首页 / 软件开发 / C# / C#对游戏手柄的编程开发-API篇(3)

C#对游戏手柄的编程开发-API篇(3)2011-08-16 博客园 Kingthy对游戏手柄的编程开发在上两篇中,已讲解完,在此篇中将讲解对键盘的模拟。

对键盘的模拟,系统已提供了非常多的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);
}