我使用DirectInput来处理输入设备,我枚举设备和每个设备上的元素。在我的游戏handle上使用模拟摇杆时,它们会报告0-65535范围内的值。对于所有类型的绝对轴,总是都是这种情况吗?如果不是:是否有任何方法可以找出DX8输入元素的DIDEVICEOBJECTDATA::dwData(用DIDFT_ABSAXIS枚举)的范围?我能想到的唯一其他选择是在我的应用程序中使用一些自制的内部校准,这听起来太像80年代了,不可能是真的。 最佳答案 您不能使用GetProperty获取范围并传入要填充的适当DIPROPRANGE结构吗?
我在一个项目中使用DirectInput8来监控电脑的各个组件。我们使用DirectInput8来监控操纵杆。通过枚举所有以DI8DEVCLASS_GAMECTRL为类型、以DIEDFL_ATTACHEDONLY为标志的操纵杆来检索数据。最近我注意到我们出现了多个操纵杆。首先,我查看了我们在两次重新启动之间存储组件的xml文件。游戏杆有两个条目,LogitechExtreme3dpro,每个条目都有一个独特的产品指南。我备份了文件并将其删除,在我重新启动机器后下次应用程序启动时有效地强制重新扫描机器。我能够让同样的问题发生并注销guids并且它们每个都不同。该系统只有一个插入的操纵杆,
使用DirectInput时,为什么使用DISCL_EXCLUSIVE时鼠标光标完全消失了|DISCL_FOREGROUND作为你的合作等级?mouse->SetCooperativeLevel(hwnd,DISCL_EXCLUSIVE|DISCL_FOREGROUND);尽管DirectInput已被弃用,但鼠标甚至对WINDOWS不可用这一事实是否意味着您在使用DirectInput时(与RAWINPUT)相比,响应速度稍快且更好? 最佳答案 当我打开这个问题时,我没有意识到DISCL_EXCLUSIVE|DirectInput
我正在开发一个输入系统,包装DirectInput和XInput。目前XInput设备被枚举两次,一次作为XInput,一次作为DirectInput(因为它们都支持)。如何确定给定的DirectInput设备是否也支持XInput?有thisMSDNpage关于这个主题,但它需要wbemidl.h和wmsstd.h,它们在mingw/gcc中不可用(并且出于某种原因我想避免使用msvc-可能是出于习惯)。我不认为将设备名称/guid列入黑名单是一个好的解决方案,但有更好的解决方案吗?谢谢。 最佳答案 wbemidl.h和所有相关的
我正在用C++编写WindowsDirectX11软件,我想从常规键盘和10键小键盘接收输入。我希望次要用户能够从10键键盘输入,而不会影响主要用户对全键盘的使用。例如,如果主要用户正在文本框输入,我希望次要用户能够将10键数据发送到软件以单独处理,这样就不会影响文本框输入。我目前正在为鼠标和键盘使用DirectInput。但如果有人知道通过WindowsAPI的解决方案,我也会考虑。当我在DirectInput中创建我的键盘设备时,我目前使用的是GUID_SysKeyboard值,它将两个键盘合二为一,这样我的软件就无法辨别键盘输入的来源。是否可以使用EnumDevices来识别两个
是否可以直接从Alps触摸板读取输入?我正在尝试将我的触摸板变成廉价的绘图板,因此我需要读取相对于物理触摸板触摸的原始未处理x和y坐标。因此,如果我触摸触摸板的左下角,它应该对应于(0,0)等。顺便说一下,我正尝试在Windows上执行此操作。我已经可以使用Synaptics触摸板做到这一点,但这只是因为Synaptics有一个很好的SDK,可以让我完全控制设备。我找不到阿尔卑斯山的类似东西。有没有办法使用windowsapi或directinput或其他什么来做到这一点? 最佳答案 抱歉,但是Alps驱动程序真的很有限,它甚至没有
我正在尝试为自定义游戏Controller应用程序模拟键盘命令。因为我需要在DirectInput环境中模拟命令,所以大多数常用方法都不起作用。我知道使用Hook100%有效,但我正在努力寻找更简单的实现方式。我进行了大量搜索,发现通过将SendInputAPI与扫描码一起使用而不是虚拟键应该可以工作,但它似乎表现得像键的“粘着”。我已经发送了KEYDOWN和KEYUP事件,但是当我尝试在DirectInput环境中发送消息时,游戏的行为就像按键被按住一样。例如,如果我模拟一个“W”按键并在第一人称射击游戏中将该键映射到“向前移动”Action,一旦我进入游戏,下面的函数将导致角色向前
如何使用DirectInput模拟按键?我目前有初始化(但我不确定它是否好):#include#pragmacomment(lib,"dinput8.lib")#pragmacomment(lib,"dxguid.lib")LPDIRECTINPUT8din;//thepointertoourDirectInputinterfaceLPDIRECTINPUTDEVICE8dinkeyboard;//thepointertothekeyboarddeviceBYTEkeystate[256];//thestorageforthekey-informationvoidinitDInput(
有时(在大约50%的运行中),EnumDevices需要5-10秒才能返回。通常它几乎是即时的。我找不到关于此类行为的任何其他报告。当事情变得如此缓慢时,可以通过观察stdout来分析:)这:std::coutEnumDevices(DI8DEVCLASS_GAMECTRL,MyCallback,NULL,DIEDFL_ATTACHEDONLY);std::cout似乎通过枚举设备卡在一个随机点-有时会在调用回调之前,有时会在调用回调之后,有时会在最后一次调用回调之后。这显然是一段简化的代码;我实际上使用的是OIS输入库(http://sourceforge.net/projects/
我有一个C++程序,它在程序开始时枚举所有输入设备(使用直接输入)。如果程序启动,然后我插入另一个Controller,则在程序重新启动之前不会识别该Controller。有人知道我可以使用的事件会导致我的程序在插入新设备后枚举所有设备吗? 最佳答案 Thisarticle讨论如何检测游戏handle的变化。首先,您可以处理WM_DEVICECHANGE消息并检查wParam是否有DBT_DEVICEARRIVAL或DBT_DEVICEREMOVECOMPLETE。不过,为了将这些作为WPARAM接收,您似乎需要调用Register