gpt4 book ai didi

c - 使用Xinput向竞赛游戏发送游戏 Controller 消息

转载 作者:行者123 更新时间:2023-11-30 17:50:29 24 4
gpt4 key购买 nike

我有一个方向盘游戏控制器,现在我正在尝试编写一个驱动程序来玩赛车游戏,例如NFS-17。我知道游戏正在使用Xinput,我将用C语言编写驱动程序。
我的问题:
1)当我转动方向盘时,如何向游戏发送消息。
2)是否使用SendMessage()。
3)如果使用SendMessage(),如何获取游戏窗口的句柄以及应该发送哪个wParam和lParam。

最佳答案

XInput适用于xbox360控制器。对于方向盘X轴,您可以使用游戏手柄的两个扳机。 XInput只是一个吸气/设置器:P它可以获取已连接控制器的状态,并仅根据您的请求报告是否已连接某些东西,它不监视或保存任何内容,也不向应用程序发送消息有输入重点。使用可以构建的应用程序发送消息是您的工作。
现在,降低到您真正需要的。您可以编写一个简单的C ++应用程序来扫描控制器的状态,但是请等待...您没有xbox360控制器:P因此,首先测试您的应用程序如何通过其oem驱动程序对方向盘做出响应。如果您无法通过任何USB端口将其读取为连接状态(请在MSDN上检查GetInputState()),然后尝试使用Windows通用驱动程序(让它安装任何合适的驱动程序,它甚至可能会将方向盘视为xbox360,它们非常类似于一点,区别在于轴和带更昂贵轮子的按钮的数量)。
然后,当您实际读取控制器(方向盘)的状态时,请使用GetHDC(windowhandle),在该窗口中,windowhandle通过(我不确定)恢复了FindWindow(窗口的名称/标题)。使用alt-tab用鼠标悬停检查游戏窗口使用的标题。
当您拥有窗口句柄和设备上下文时,可以通过窗口句柄向其回调WndProc函数corespondent发送消息,甚至可以通过设备上下文显示文本/绘制图像/形状。消息应该是相应的虚拟键代码(例如,VK_UP为UP箭头...向上查找),如果没有滚轮,则将其按在键盘上。诀窍是针对车轮的每个旋转角度模拟一个PWM。只需发送高频消息,即交替按下/释放VK_LEFT键代码,即可使车轮高度向左旋转,而对于转向锁,只需发送一个KEY_DOWN消息,直到转向锁被解除,然后发送KEY_UP消息,然后发送相应的消息即可交替的频率再次出现。对于较小的滚轮,请在按键/释放消息之间留出较大的停顿时间。
成为一名驾驶员的好处是,您可以根据自己的喜好调整灵敏度,按钮相关性,盲区。

另一方面,已经有这样的模拟器,然后您可以再次使用usb通讯API(从USB端口读/写数据,从USB端口读/写数据,没什么花哨的:))通过6 + 1传输来构建自己的方向盘,一个微控制器(PIC,atmega,nxp等便宜的产品,在就绪或加有usb控制器时带有硬件USB),用于X,Y等轴的可变电阻器以及用于驱动系统的某些部件。祝您好运,并在youtube上发布:P!

附言地狱现在太晚了,但是嘿...我觉得我需要写一些我从未做过的曼波-詹博,但是那行得通...如果我不那么懒的话。 :)

更新:如果兼容,xInput可能会起作用(可能是高端车轮和操纵杆),但DirectX也知道方向盘,所有这些都可以。对我来说,这是唯一的解决方案。微软表示,应使用XInput和DirectX,因为XINput为兼容产品提供音频和更多内容。
尽管可以接受许多实现,但算法是合理的。由于专用工具不支持我的版本,因此我成功为GTA SA实施了该工具。现在,我终于有了踏板的Acc和Brake :)我使用计时器来达到一定的频率(自己选择,经验性的东西),并将脉冲宽度从接近0调制到整个周期(轻轻触摸踏板并持续)将踏板踩到金属上)。在每个脉冲上,我发送了两条消息:在脉冲开始时按下W / S键,在计算出的脉冲宽度达到其最终值时按下W / S键。 “脉冲宽度”的公式是总宽度的百分比,相同百分比或通过灵敏度设置进行修改,例如踏板从其最大行进距离行进(我认为DirectInput报告的整数为[-1000,1000]。[-fullbrake ,fullacceleration])。

关于c - 使用Xinput向竞赛游戏发送游戏 Controller 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17252273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com