Dat*_*bot 7 windows virtual gamecontroller
我将如何创建一个"游戏手柄",它似乎是DirectInput应用程序作为普通游戏控制器,但其控件的状态实际上是由软件定义的?
小智 8
写一个设备驱动程序假装是一个.
具体来说,Windows设备驱动程序处理所谓的通过中断请求协议中断请求 - 这可以归结为一个包裹结构,在驱动程序中的一组缓冲区内.
现在,您需要知道的下一件事是,许多驱动程序实际上是分层的,或堆叠的,或者您想要使用的任何名称.因此,例如,要编写磁盘驱动程序,您可以与其上方的驱动程序(作为磁盘类)进行交互,但使用其下方的驱动程序(例如scsi端口)来实际向您的设备发送命令.
这就是真实设备的工作原理.假设备需要符合顶级接口要求,例如磁盘,控制器或鼠标,或其他任何东西.然而,在他们下面他们可以做任何他们喜欢的事情 - 返回他们喜欢的任何价值
这开启了通过用户模式应用程序控制驱动程序并假装"成为"设备的可能性.要发送驱动程序消息,您可以DeviceIoControl执行此操作; 然后实际获得这些消息你可以:
驱动程序还可以访问\\Registry\\Machine各种其他非用户特定的非资源管理器注册表区域,因此可以通过这种方式进行通信.
最后,不能说你不能过滤现有的IO,而不是通过新设备来完成.有很多选择和方法可以做到这一点.
如果你打算这样做,你需要:
您可能还想从这篇博客文章中的参考文献开始.你会发现驱动程序代码基本上有很多不同的名称,所以我会解释其中的一些:
编辑:我对DirectInput没有大量的了解 - 可能有一种方法可以通过DLL重定向等覆盖使用中的各种API控件,这可能比我描述的方式更简单.
我知道这是一个老问题,但对于任何对此主题感兴趣的人来说,这个名为ViGEm 的项目也值得一看。
您可以模拟一些知名的游戏手柄,例如 Microsoft Xbox 360 控制器、Sony DualShock 4 控制器和 Microsoft Xbox One 控制器。该项目还提供了一些 API 来与这些虚拟控制器进行交互。例如,C# API 可以在这里找到
最简单的解决方案可能是模拟XInput设备(Xbox 360和One)。大多数现代游戏都支持这些功能,并且设置非常简单。这是一个C ++项目,可在不提供任何已安装驱动程序或外部依赖项的情况下提供此功能:https : //github.com/shauleiz/vXboxInterface/
| 归档时间: |
|
| 查看次数: |
19148 次 |
| 最近记录: |