问题标签 [directinput]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
756 浏览

c++ - how to determine keyboard disconnected in DirectInput

I am monitoring HID connections using EnumDevices(..., DIEDFL_ATTACHEDONLY). When I disconnect a game controller it no longer shows up in the callback. However, when I disconnect the keyboard, it still shows up in EnumDevices.

I've looked through the API, but I don't see where else to query if a device is connected.

0 投票
3 回答
11756 浏览

c# - 如何将其他命名空间导入 Visual C#?

抱歉,如果我的问题看起来有点无聊,但我找不到答案。我想在我的 XNA 游戏中使用 DirectInput。我已经阅读过,似乎这是从 Xbox 360 控制器以外的游戏手柄获取输入的最佳方式。第一步是包含 Microsoft.DirectX.DirectInput 命名空间,但我不太清楚如何。简单地把它放在我上课的开头是行不通的,Visual C# 无法识别它。

这让我想到我应该下载 DirectX SDK 吗?里面有很多东西,而且文件很大,我该如何下载单个命名空间?这甚至可能吗?如果我可以下载单个命名空间,我应该把文件放在哪里?

现在你可以看到所有的问题在我的脑海里盘旋。那么如何让 Visual C# 识别 Microsoft.DirectX.DirectInput 命名空间,以便我可以使用方法、属性和所有这些好东西呢?

谢谢!

0 投票
2 回答
1445 浏览

c# - 引用 .dll 文件时出现错误消息

我想在我的 XNA 游戏中使用 DirectInput,但是在引用 .dll 文件时我遇到了问题。我正在使用 Microsoft Visual Studio C# Express Edition。这正是我所做的:

  • 右键单击“参考”
  • 选择“添加参考”
  • 导航到 .dll 文件并点击 OK

然后我收到以下错误: 在此处输入图像描述

如上所述,我想引用 Microsoft.DirectX.DirectInput 命名空间,但我不知道它在哪个 .dll 文件中,所以我只选择了“d3dref9.dll”。该目录下的每个 .dll 文件都不起作用,所以我选择的任何一个都给我同样的错误。现在我已经能够使用其他 .dll 文件来完成此操作,但由于某种原因,DirectX 文件无法正常工作。我知道这可能是因为这个人只是看了他代码中的第二行。

我安装了 DirectX SDK 为什么我不能引用任何 .dll 文件,我怎样才能做到这一点?

谢谢!

0 投票
1 回答
689 浏览

c++ - 逆向工程全局热键块

我正在尝试对一个应用程序(游戏)进行逆向工程(OllyDbg),该应用程序(游戏)在其窗口(D3D)处于活动状态(Ctrl-Alt-Del 除外)时禁用(捕获/拦截/阻止)所有全局热键。

我的问题是此类应用程序在其窗口处于活动状态时可以通过哪些方式捕获/禁用全局热键(包括在其他应用程序中设置的 winkey、CTRL+Esc 和全局热键)?

它似乎使用 DirectInput (如果重要的话)。我看到它没有设置任何低级挂钩(SetWindowsHookEx)。这样的事情可以通过哪些其他方式来完成?

观察到:

  • 当应用程序被挂起时(当它的窗口仍然处于焦点时),热键在窗口处于焦点时仍然被禁用。将窗口切换到其他东西可以启用它们。切换回暂停的应用程序窗口会再次禁用热键。
  • 如果做同样的事情,但在窗口失去焦点后暂停应用程序,然后切换回暂停的窗口,热键完全可以工作。
  • 编辑:该应用程序似乎阻止了用 设置的全局热键RegisterHotKey,但不会禁用任何借助钩子 ( SetWindowsHookEx) 制作的热键。

上面的实验似乎表明它是与窗口相关的一些设置,即使应用程序被挂起也能正常工作。会不会是某种 DirectInput 设置?(尽管我看到的唯一 DINPUT API 函数调用是DINPUT8.DirectInput8Create。)

我这样做是希望改变这种行为,使其他应用程序的热键在游戏窗口集中时像往常一样工作。任何想法和提示表示赞赏。

0 投票
1 回答
286 浏览

c# - 游戏无法开始

我将 DirectInput 与 XNA 一起使用,但是由于某些奇怪的原因,当我实现以下代码时,我的游戏将无法启动:

这真的打破了我的游戏,评论这条线虽然留下了它却打破了它。我完全不知道为什么。我已经Microsoft.DirectX.DirectInput参考了一切。我什至开始了一个全新的项目,刚刚进入那条线,但在游戏启动时没有运气。

这实际上是我的完整代码,我只是Input.InitializeController()Game1().

有谁知道这是怎么回事,我完全被难住了。

谢谢!

0 投票
3 回答
20604 浏览

c++ - 带有 C++ 和 DirectInput 的 USB 操纵杆

我一直在尝试从 USB 操纵杆读取数据(x/y 轴、按下的按钮等),并且听说过 DirectInput。一直在寻找一个不错的例子或演练,但收效甚微。如果有人可以分享一个简单的教程,或者引导我到正确的地方,我会欠你的。谢谢

编辑:试图在 Windows 平台上实现这个目标

0 投票
1 回答
1970 浏览

python - 允许在 DirectX 中移动鼠标的 Python 模块

有谁知道可以在 directX 游戏中移动鼠标的 Python 模块?

我已经尝试过 Ctypes 和 Hammonds win32 模块,但由于 DirectInput 阻止普通 python 模块访问鼠标,它们在 directX 中不起作用。

是否有使用 HID 仿真的解决方法或模块?

0 投票
1 回答
1066 浏览

c++ - 从 Direct Input 和 GetDeviceState() (C++) 接收键状态

我正在使用直接输入为键盘输入制作包装器。为了获取关键状态,GetDeviceState()使用 char 缓冲区调用该函数。

这一切都很好,但是现在要发送键事件,我必须遍历缓冲区并检查所有被按下的键。我希望会有一个回调,而不是只传递按下的键码。

如果有人有直接输入的经验,遍历键码缓冲区是检查按键的唯一方法吗?

0 投票
1 回答
174 浏览

directx - 如何使用 DirectInput 在我的游戏中创建聊天框?

我能想到的唯一解决方案是检查正在按下哪个字符,然后在屏幕上显示该字符。然而,这让我觉得这真的很烦人,而且通常是一个糟糕的解决方案。我想不出另一种解决方案。我考虑过使用 Windows 消息循环而不是 DirectInput,但我仍然需要逐个字符地检查(除非我误解了某些东西),所以看起来我会遇到同样的问题。

有人有想法么?

0 投票
7 回答
5397 浏览

c++ - DirectInput8 EnumDevices 有时非常缓慢

有时(在大约 50% 的运行中),EnumDevices 需要 5-10 秒才能返回。通常它几乎是即时的。我找不到任何其他关于这种行为的报告。

当事情变得如此缓慢时,可以通过观看 stdout 来分析 :) 这个:

似乎通过枚举设备挂在一个随机点 - 有时它会在回调被调用之前,有时在一对夫妇之后,有时它会在最后一次调用它之后。

这显然是一段简化的代码;我实际上使用的是 OIS 输入库 ( http://sourceforge.net/projects/wgois/ ),因此有关上下文,请在此处查看完整源代码:

http://wgois.svn.sourceforge.net/viewvc/wgois/ois/trunk/src/win32/Win32InputManager.cpp?revision=39&view=markup

虽然那里似乎没有什么特别的结果,但可能是它们的初始化中的某些东西可能是原因 - 我对 DI8 了解得不够多,无法发现它。

任何关于为什么它会这么慢的想法将不胜感激!

编辑:

我设法在 etl 跟踪文件中发现了问题,并在 Windows 性能分析器中对其进行了分析。看起来EnumDevices最终调用 to DInput8.dll!fGetProductStringFromDevice,调用HIDUSB.SYS!HumCallUSB,调用KeWaitForSingleObject并等待。10 次中有 9 次(字面意思 - 跟踪中有 10 个样本)返回非常快(每个 324us),准备好的调用堆栈包含usbport.sys!USBPORT_Core_iCompleteDoneTransfer后跟HIDUSB.SYS!HumCallUsbComplete,这看起来很正常。

但是 10 次中有 1 次,这几乎需要 5 秒才能返回。在准备好的调用堆栈上是ntkrnlmp.exe!KiTimerExpiration代替HIDUSB.SYS函数。我猜这一切都表明 HIDUSB.SYS 驱动程序正在以 5 秒的超时时间异步查询设备,有时它会失败并达到此超时时间。

我不知道此故障是否与任何特定设备相关(我确实有一些 USB HID)或者它是否是随机的 - 很难测试,因为它并不总是发生。同样,任何人可以给我的任何信息都将不胜感激,尽管鉴于 DirectInput 的奇怪情况,我不希望微软很快解决这个问题!

也许我只需要提前开始异步初始化输入,并接受有时在用户输入发生之前会有 5 秒的延迟。