问题标签 [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 投票
2 回答
313 浏览

c++ - DirectInput 未解析的外部符号

这个让我发疯。我已经尝试了我能想到的一切。以下是 DirectInput 代码的相关部分。

当我尝试编译时,出现错误:

在函数 _WinMain@16 中引用的未解析的外部符号“int __stdcall EnumDevicesCallback(struct DIDEVICEINSTANCEA const *,void *)”(?EnumDevicesCallback@@YGHPBUDIDEVICEINSTANCEA@@PAX@Z)。

可以看到,编译器找不到的外部符号与 EnumDevicesCallback 函数的 DIDEVICEINSTANCE 参数有关。那不应该,因为我已经包含了 dinput.h 并链接到 dinput8.lib 和 dxguid.lib。我什至尝试在我自己的代码中定义 DIDEVICEINSTANCE 并收到一条消息,它与以前的定义冲突。

该错误消息可能意味着什么?

0 投票
0 回答
1697 浏览

c++ - DirectInput8 挂钩问题

我刚刚开始进行directx/directinput 开发,并且正在使用我在网上找到的一些代码示例运行一些测试。无论如何,我想挂钩一个使用 dinput8 将我自己的自定义输入发送到前​​窗口的应用程序,我正在使用这个基础来做到这一点:

这段代码中唯一的问题是当我尝试发送输入时,它没有通过。我得到了一些帮助并缩小了解决方案的范围,即:“ Try GetDeviceState hk just memset(buffer, 0, size) or SendDeviceData ”。我搜索了一下,但我找不到更多关于如何实施这个解决方案的信息,我很困惑。你们哪位好心人能告诉我如何使用这些信息来修复这个基础吗?我将非常感激,谢谢。

0 投票
1 回答
4657 浏览

c++ - SendInput 到后台窗口

我想将从 android 客户端收到的鼠标和键盘输入发送到在 Windows 上运行的游戏。 SendInput适用于我迄今为止工作过的几乎所有游戏。但是为了SendInput工作,游戏必须是一个前景窗口。

为了解决我使用PostMessage(hwnd,...)hwnd 处理游戏窗口的问题。但如果游戏使用 DirectInput,这将不起作用。这是通过 hooking 解决的GetDeviceState。现在我开始制作的另一个游戏正在使用WM_INPUT或原始输入,我必须创建原始输入才能使其工作。

根据这篇MSDN 文章

DirectInput 是一组 API 调用,用于抽象系统上的输入设备。在内部,DirectInput 创建了第二个线程来读取 WM_INPUT 数据,使用 DirectInput API 会比直接读取 WM_INPUT 增加更多开销。

directInput 使用 WM_INPUT 工作。

SendInput函数将INPUT 结构中的事件串行插入到键盘或鼠标输入流中。这些事件不会与由用户(使用键盘或鼠标)或通过调用 keybd_event、mouse_event 或对 SendInput 的其他调用插入的其他键盘或鼠标输入事件相互穿插。

所以 SendInput 也提供了抽象。

我想要的只是将输入独立地发送到应用程序,即使它的窗口不在焦点上。这样我就可以一次将输入发送到多个游戏。有没有办法使用像 SendInput 这样的更高级别的 API 调用来实现这一点?这可以通过 SendInput 完成吗?是否有任何 C/C++ 库为此?

0 投票
1 回答
389 浏览

c# - 在 MonoGame 中使用 C# 中的 DirectInput?

我正在尝试从以前的游戏开发语言继续前进,并且偶然发现了一个我认为在我的旧语言中是理所当然的问题。我正在尝试使用 MonoGame 支持 C# 中的 DirectInput,因为我对 C# 使用它作为我的主要游戏开发语言感到满意。

问题是我不知道如何支持 DirectInput 控制器和舞台。它超出了我的舒适区。我花了太长时间通过 Coding Groups 和 Google 寻找答案,却找不到答案,头疼不已。

是否可以在 C# x MonoGame 中支持 DirectInput 控制器/舞板,如果可以,它是如何完成的?我真的很感激这方面的任何帮助。

0 投票
1 回答
503 浏览

windows - 如何将 RawInput RAWKEYBOARD 结构转换为 DirectInput DIK_ 常量?

我正在将当前使用 DirectInput 的应用程序转换为使用 RawInput。(DirectInput 是一个很大程度上被弃用的 API。)

不幸的是,尽管 RawInput 是 DirectInput 的推荐继任者,但它似乎并没有以与 DirectInput 完全相同的方式提供键盘数据。

DirectInput 使用DIK_*常量(如DIK_ADIK_RETURN等)来定义键盘上的特定物理键。这些键在键盘硬件上是一致的,但不会因键盘布局而改变。(例如,DIK_Q指的是标准美国英语 QWERTY 键盘上 Q 键所在物理位置的任何键。)在我的情况下,这是所需的行为。

RawInput 的RAWKEYBOARD结构同时提供 aMakeCode和 a VKey。我不能使用VKey,因为它会根据键盘布局而变化。

但是与常数MakeCode不对应 1:1 。DIK_*特别是,它不区分左右 ctrl 和 alt 键,或者大多数数字键盘键与其他键。

所以我的问题是:是否可以使用RAWKEYBOARD结构的内容来计算等效DIK_*常数?假设这MakeCode是解决这个问题的一部分,我可以依靠在MakeCode键盘硬件上保持不变,就像DIK_*常数一样吗?

0 投票
1 回答
595 浏览

c++ - 如何防止鼠标向 DirectInput 游戏发送输入?

这个问题最初是关于如何捕获鼠标事件,我在使用 SetWindowsHookEx 和 C++ 进行了大量研究后解决了这个问题。问题是,它适用于 Windows,它适用于应用程序,但不适用于游戏。有人可以帮我理解为什么鼠标钩在某些游戏中不起作用吗?我尝试过的所有游戏都可能使用原始输入吗?:S(我试过 Ibb&Obb、Fallout 4、Metro Last Light 和其他一些游戏)

基本上我在问:如何使用鼠标钩在所有运行的应用程序中全局捕获它?

感谢帮手。

编辑:我发现我玩的大多数游戏都使用 DirectInput。猜猜更好的问题是:如何在 DirectInput 中拦截鼠标消息并防止它们被游戏注册?我希望能够拖动鼠标,它对游戏没有影响。

0 投票
0 回答
629 浏览

c# - 错误尝试读取或写入受保护的内存,在哪里查看?

我在 .net 2.0 中使用 dx 2006 托管引用的非托管代码出现以下错误(我找不到任何具有托管代码文件夹的更新)。

Microsoft.DirectX.DirectInput.dll 中出现“System.AccessViolationException”类型的未处理异常

附加信息:试图读取或写入受保护的内存。这通常表明其他内存已损坏。

我想知道如何弄清楚我可能损坏了哪些内存,因为这几乎是来自示例代码的一对一。虽然可以确定这里是失败的代码。

我不确定任何其他代码是否相关,但如果需要,我会发布它。如果我将效果对象构造函数更改为不使用效果(eo = new EffectObject(ei.EffectGuid, joystick);),它会在没有错误的情况下这样做,但是通过 SetParameters 添加效果时会引发错误。从我读到的关于这个错误的内容来看,最难的部分是追踪导致错误的 DLL,但在这种情况下,我知道它是直接输入。那么从这里我可以做些什么来找出内存泄漏或损坏?

不确定调用堆栈在这种情况下会有所帮助,但它是:

0 投票
1 回答
1875 浏览

c++ - 将鼠标点击发送到以管理员身份运行的 DirectX 游戏

我一直在构建一个需要向游戏发送模拟输入的游戏相关程序(这是屏幕上的顶部窗口并以全屏模式运行)。经过一番挣扎,我终于让鼠标移动(光标拖动)和键盘输入正常工作,但由于某种原因,游戏不会响应模拟鼠标点击。

我尝试了以下方法:

我面临的第一个难题是一般发送消息,但我意识到这个问题是由游戏进程权限>发送应用程序权限引起的。在此之后,我遇到了另一个问题,按键只能在某些游戏窗口/屏幕上注册,但经过一番搜索,我能够使用扫描码来克服这个问题。例如:

我还能够使用 INPUT 进行鼠标移动,如下所示:

现在最大的问题是游戏拒绝注册我的模拟鼠标点击。我希望有一种无需深入挂钩即可发送鼠标输入的方法。(游戏有多种客户端反作弊机制,所以我大胆猜测任何类型的外部进程挂钩或 DLL 注入都会触发保护。)根据我的阅读,我可能需要编写一个自定义驱动程序一个模拟的硬件鼠标,因此输入来自内核级别。不是一个更好的选择,但如果需要,sobeit. (如果需要,任何人都可以为此提供有用的信息吗?我从来没有搞砸过编写驱动程序,但我想的一切都是第一次。)

TL;DR:我需要做什么才能让模拟鼠标点击在似乎忽略非硬件输入的游戏中注册?(即,我怎样才能让游戏认为鼠标点击是合法的,类似于KEYEVENTF_SCANCODE在模拟键盘输入时使用?)

0 投票
1 回答
1216 浏览

c++ - DX11 DirectInput8Create 导致 LNK2019 错误

我正在尝试创建一个 GPU 渲染的粒子系统,它使用这个输入类来处理鼠标/键盘输入。

问题是线路;

导致 LNK2019: Unresolved External Symbol 错误。我已经包含了必要的文件,所以我不确定为什么会这样。下面分别是Input.hInput.cpp文件。

INPUT.H文件

INPUT.CPP文件

对于解决此问题的任何帮助,我将不胜感激。

0 投票
1 回答
332 浏览

c# - DirectInput 是否能够判断棒上存在哪些轴?

我目前正在编写一个.Net DirectInput 包装 DLL,以允许基于事件报告来自其他语言的棒输入(我正在使用 AutoHotkey)。
我目前使用 SharpDX 读取棒数据,但 SharpDX 似乎只报告棒报告轴数,而不是棒报告轴。
例如,一根摇杆完全有可能有 7 个轴,但没有 X 轴(您可以通过安装 vJoy 并配置它具有哪些轴来看到这一点 - 在 vJoy 配置实用程序中,取消勾选 X 轴。在 joy.cpl 中注意X 轴消失了)。
通过 SharpDX(使用 eg SharpDX.DirectInput.Joystick.Capabilities.AxeCount)读取棒帽,似乎无法判断缺少的轴是 X。
底层 DirectInput API 是否能够表示此信息,还是我必须使用 RawInput 之类的东西才能获取此信息?