C#对游戏手柄的编程开发-API篇(3)
2009-03-29 08:22:04 来源:WEB开发网对游戏手柄的编程开发在上两篇中,已讲解完,在此篇中将讲解对键盘的模拟。
对键盘的模拟,系统已提供了非常多的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号手柄模拟”按钮。最小化程序后将鼠标焦点移动对您要玩的游戏上,您就可以使用手柄玩游戏了。
系列文章:
C#对游戏手柄的编程开发-API篇(1)
C#对游戏手柄的编程开发-API篇(2)
- ››编程实例 一个简单的智能感知效果
- ››游戏定位成牵引Android发展的火车头
- ››游戏场景烘焙贴图制作
- ››游戏植物大战僵尸 iPhone 版9天销售额超100万美元...
- ››游戏开发包 iPhone cocos2d 初体验
- ››游戏三维怪物施法特效教程
- ››游戏人生Silverlight(2) - 趣味钢琴[Silverlight ...
- ››游戏人生Silverlight(3) - 打苍蝇[Silverlight 2....
- ››游戏人生Silverlight(4) - 连连看[Silverlight 2....
- ››游戏人生Silverlight(5) - 星际竞技场[Silverligh...
- ››游戏《封神榜》人物纣王3DMAX制作全过程
- ››编程快捷删除文档中多余的空行
更多精彩
赞助商链接