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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义