前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >记一次XBOX手柄二开按键监听(西瓜键/Guide键)

记一次XBOX手柄二开按键监听(西瓜键/Guide键)

原创
作者头像
tangmanger
发布2024-12-14 21:40:15
发布2024-12-14 21:40:15
1030
举报
文章被收录于专栏:我的WPF笔记我的WPF笔记

最近有一个小玩具 想实现手柄控制电脑应用,但是 其中一个功能,是home键(guide键),按下应用弹出设置界面,本来以为很简单的功能,结果踩了坑。

一、初次尝试

对于标准的joystick或者gamepad 开发,首先想到的是微软的SharpDX (https://github.com/sharpdx/SharpDX),本以为很简单的一件事,结果发现SharpDX.XInput这个库,只监听了标准按键。

图片
图片

这就很尴尬了,没有guide键。

二、对SharpDX.XInput源码的分析

现在知道了SharpDX.XInput并不提供直接的guide键控制项,进一步翻源码看看为啥他只有这些个枚举值,以及它怎么实现的,看看我们是否能够通过修改枚举值来实现功能。

图片
图片

翻看源码 ,他们实现读取按键,在windows上实际是通过这三个dll 来进行。xinput1_4.dll,xinput1_3.dll,xinput9_1_0.dll,我们继续翻看xinput的实现,

图片
图片

 找到这个函数,发现通过这个函数来获取每个按键状态,是不是将输出类型改成uint就行,但是在尝试修改buttons 为uint 也不好使。

三、抛弃SharpDX.XInput 

想着是不是可以hid方式去读取设备,获取原始输入值。就在这个时候偶然发现一篇文章,用C++来读取控制键的https://blog.csdn.net/flame_cyclone/article/details/141648073,借鉴文章做法实现一个C#版,就此搞定。

图片
图片

四、结语

本来打算想详细写写过程的,但是最近事实在多,公司效益不好。裁员降薪的,虽然我没被裁,但是被降薪了,现在啥心情都没有了。活儿还贼他妈的多,这是什么世道啊~~~~~~~~

对了 GitHub 地址:https://github.com/tangmanger/GamepadControl             感谢

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档