问题标签 [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 回答
565 浏览

windows - 异步读取键盘输入和使用 DirectInput 有什么区别?

DirectInput 需要很多初始化函数等等来检测键盘输入,那么使用它而不是 GetAsyncKeyState() 函数有什么好处呢?

0 投票
1 回答
4343 浏览

.net - Low level mouse hook and DirectX

I'm building an application which needs to filter some mouse clicks system-wide. That is, I need to make the system ignore some mouse button clicks at special occasions.

I use low level mouse hook and SetWindowsHookEx to filter out these clicks. It works relatively well, except for WPF applications. I guess that's because these applications use DirectX and DirectInput for input processing, and that's why I can't filter out clicks in these applications, since they get the input directly from the driver.

Is there any way how to filter clicks in WPF/DirectX applications?

I know it is generally not good idea to globally filter clicks, but it is crucial for my application, and I will make sure that it is not filtered in games and other programs. But WPF applications have ordinary GUI, so I need to filter clicks in them as well.

Update

I guess I could solve this problem by writing my own filtering driver, but since I don't have any experience in writing drivers, please let me know if there is any other solution.

API Hooking Resources

I've found some helpful links regarding API hooking. Use this as a reference.

Hooking Windows API
API hooking revealed
API hooking revealed Part 2
Hijack Textout Calls From Notepad
madCodeHook
IAT Function Hooking

FINAL SOLUTION

WPF does not use DirectInput, but standard Win32 messages for input handling (except for stylus, which is the source for all problems for me, because I use stylus for development, and I wasn't aware WPF apps are stylus-aware). However for filtering clicks in apps that use DirectInput, one would have to hook API, as the accepted answer explains.

0 投票
1 回答
3258 浏览

c# - C# DirectInput - 确定游戏手柄控制器类型

我正在尝试使用 DirectInput API 在我的应用程序中使用各种游戏手柄控制器。据我所知,轴在设备之间的映射方式不同。

除了使用 DeviceInformation.ProductName/InstanceName 来区分控制器以允许不同的轴控制分配之外,是否有一种通用的实践方法来确定控制器类型?

0 投票
2 回答
42610 浏览

c# - 在 DirectInput 应用程序中使用 SendInput API 模拟键盘

我正在尝试为自定义游戏控制器应用程序模拟键盘命令。因为我需要在 DirectInput 环境中模拟命令,所以大多数常用方法都不起作用。我知道使用钩子可以 100% 工作,但我正试图找到一个更简单的实现。

我做了很多搜索,发现通过使用带有 Scancodes 而不是虚拟键的 SendInput API 应该可以工作,但它的行为似乎就像键是“粘着”的。我已经发送了 KEYDOWN 和 KEYUP 事件,但是当我尝试在 DirectInput 环境中发送消息时,游戏就像按键被按住一样。

例如,如果我模拟“W”键按下并将该键映射到第一人称射击游戏中的“向前移动”动作,一旦我进入游戏,下面的函数将导致角色向前移动。然而,只要发出一次命令,它就会无限期地向前移动角色。

这是我正在调用的 SendInput 函数的代码片段(在 C# 中):

我不确定这种方法是否是一个失败的原因,或者我是否只是缺少一些愚蠢的东西。如果我不必使用钩子,我讨厌过度复杂化我的代码,但这对我来说也是一个新领域。

任何人都可以提供任何帮助,我们将不胜感激。

谢谢!

0 投票
1 回答
1455 浏览

c++ - 使用 C++ 中的 USB 游戏杆

在我的项目中,我使用直接输入来管理连接到 PC 的操纵杆并且它可以工作,但恕我直言,直接输入很难完美地理解和管理......

是否存在其他一些库/方法来以更漂亮的模式管理 C++ 中的操纵杆?

0 投票
1 回答
991 浏览

c# - 直接输入dll问题

我正在用 c# 开发一个使用 directinput 的应用程序......在我的开发电脑中,安装了 directx sdk 一切正常......但是在另一台只安装了 directx 客户端的电脑上,应用程序没有工作......我将dll添加到文件夹中:

  • Microsoft.DirectX.DirectInput.dll

我需要添加其他的让我们玩???

提前致谢!错误是这样的: 替代文字

不是应用程序 WIn32 有效(来自 HRESULT 的异常:0x800700C1)

这发生在这里:

0 投票
1 回答
689 浏览

windows - 2 只鼠标,在 Windows 上仅捕获一只鼠标(DirectInput、DDK、Linux 等)

我已将 2 只鼠标连接到 PC,我希望一只鼠标可以作为普通鼠标工作并专门捕获第二只鼠标。

首先,我尝试使用 DirectInput。它在 InstanceName 中显示了 2 个带有 word mouse 的设备。但只有一台设备有 DeviceType.Mouse,而且它只是真正工作的设备。当我获得它时,它正在阻止两只老鼠。

其次,我决定创建驱动程序。我下载了WinDDK。有鼠标过滤器驱动程序示例。我能够编译它。但我不是驱动程序程序员。我理解起来很复杂,但它有一些与 PS/2 鼠标相关的代码。我所有的鼠标都是USB的。

它应该与 .INF 文件一起安装。我更喜欢动态加载它。

我不太确定这是正确的方向。我这样做是为了我的业余机器人项目。我希望 PC 从鼠标中获取一些信息作为传感器。我认为一定有现有的类似项目或解决方案。

我的桌子上也有 linux pc。将鼠标附加到linux并解析可能会更好

看起来像 sudo cat /dev/input/mouse1 - 提供一些数据,但不阻止设备点击和移动。

我希望简单的解决方案已经存在

干杯马克斯

0 投票
2 回答
1020 浏览

c# - 使用 DirectInput 在 C# 中检索键盘状态?

当在特定表单上按下某个键时,我需要相当快地检索键盘状态 - 速度足够快,以至于 Windows 表单的标准 KeyUp/KeyDown 事件不够快。有人告诉我尝试 DirectInput,但我没有使用该库的经验或任何线程经验,所以我完全不确定如何开始。

每次 DirectInput 获取键盘状态的变化时,我将如何设置一个线程来调用表单上的函数?我知道如何初始化设备,而 SetEventNotification 正是我想要的,但我不知道如何使用它。

任何帮助将不胜感激!

0 投票
2 回答
1218 浏览

c++ - Windows 上的 C++:在没有窗口的情况下使用 DirectInput?

简洁版本:

如果我无法访问 HWND/HINSTANCE,如何初始化和使用 DirectInput?

背景资料:

我目前在我的程序的大部分部分使用 SFML,其中包括创建窗口。奇迹般有效。但我对 SFML 的输入系统并不完全满意(例如,我想要 XInput for XBox 360 游戏手柄)并且想自己编写。

我已经编写了 XInput 部分,但是对于其他游戏手柄/操纵杆/...我还需要 DirectInput。由于 SFML 对用户隐藏了与 Windows 相关的代码(这是正确的),我无权访问 hwnd 或 hinstance。没有它我如何使用 DirectInput?也许一直在捕捉输入,而不仅仅是在窗口处于活动状态时?(然后我可以根据 Window 的 (de)activated 事件对其进行过滤。)

谢谢,

旺科先生

0 投票
1 回答
1624 浏览

c++ - 查明 DirectInput 设备是否支持 XInput(使用 mingw/gcc)

我正在研究一个输入系统,包装 DirectInput 和 XInput。目前 XInput 设备被枚举了两次,一次是 XInput,一次是 DirectInput(因为它们都支持)。

如何确定给定的 DirectInput 设备是否也支持 XInput?关于该主题有这个 MSDN 页面,但它需要 wbemidl.h 和 wmsstd.h,它们在 mingw/gcc 中不可用(出于某种原因,我想避免使用 msvc - 可能是习惯)。

我不认为将设备名称/指南列入黑名单是一个好的解决方案,但有更好的解决方案吗?

谢谢。