开发者社区> 吞吞吐吐的> 正文

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

简介:
+关注继续查看

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

对键盘的模拟,系统已提供了非常多的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号手柄模拟”按钮。最小化程序后将鼠标焦点移动对您要玩的游戏上,您就可以使用手柄玩游戏了。

软件下载(不提供源码):/Files/kingthy/JoyKeys-bin.rar

本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2009/03/29/1424398.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
游戏陪玩源码开发,提升API性能的方法
游戏陪玩源码开发,提升API性能的方法
68 0
艾伟:C#对游戏手柄的编程开发-API篇(2)
回顾“被动方式”开发 在C#对游戏手柄的编程开发-API篇(1)这篇文章中我们介绍了“被动方式”的开发。在此方式下,我们的程序只扮演一个消息接收者。系统会定时告诉我们某个游戏手柄当前的状态,我们的程序接收到后再按实际需要进行处理即可。
1435 0
ASP.NET Core Web API 帮助页
ASP.NET Core Web API 帮助页
92 0
一文概览设计Web API 中的细节
一文概览设计Web API 中的细节
56 0
借助 Web Animations API 实现一个鼠标跟随偏移动画
借助 Web Animations API 实现一个鼠标跟随偏移动画
66 0
WebAPI学习(一)——创建Web API程序
WebAPI学习(一)——创建Web API程序
119 0
几种不常用Web API(振动、重力感应、联网状态、系统电量信息、页面可见性、canvas转base64、监听屏幕旋转、元素全屏显示)
navigator对象中有一些不常用的API,以下主要介绍vibrate振动,deviceorientation重力感应,online联网状态,getBattery系统电量信息,visibilitychange页面可见性,toDataURL(canvas转base64),orientationchange监听屏幕旋转和fullScreen元素全屏显示。
100 0
.NET MVC第十章 vue axios解析web api接口
.NET MVC第十章 vue axios解析web api接口
40 0
+关注
吞吞吐吐的
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
CUDA Math API
立即下载
阿里云 API 精选手册(Alibaba Cloud API Playbook)
立即下载
重保场景及API安全指南
立即下载