Java 虚拟手柄
Java Virtual Gamepad
问题
我正在开发一个自定义硬件控制器,我想在 Java 中对其进行处理后将其输入映射到虚拟 XInput 控制器。基本上出于所有意图和目的,我想直接从 java.
控制 XInput 控制器
我想到的解决方法
- 编写设备驱动程序,这似乎是我很乐意避免的真正痛苦。我以前从未编写过设备驱动程序,也不知道如何注册 XInput 控制器。看来这要花很长时间,我没有也不想花的时间。
- 使用 PPJoy 和 this 库。我想避免这种情况,因为 PPJoy 非常过时(距离我能找到的上次更新已经超过 10 年)并且需要一个额外的层来将 DirectInput 转换为 XInput。库也拒绝为我编译。
- 为 VJoy 开发包装器。然而,这将需要从 DirectInput 重新映射到 XInput。我不熟悉 C/C++ 包装,但到目前为止这似乎是最好的选择。
有没有人知道如何解决这个问题?我考虑过跳过 XInput 并使用 Robot (AWT) keyboard/mouse 来完成它,但游戏拒绝获取软件输入,很可能它们只读取硬件数据。模拟 keyboard/mouse 会很好,但不是最佳选择,因为它会很尴尬,但是我无法找到一种游戏可以识别的方法。感谢所有帮助!
写一个包装器,你不需要知道任何,如果你真的不想,我会重复任何 C++ 代码。只需使用 swig. There are plenty of examples, start with something basic。 (请注意,我不打算包括示例,因为那里已经有足够的东西了)。有问题可以留言,我会帮你解决的。
编辑
好的,我会很好,简单的例子,假设你有一个 example.h 文件,在相同的位置创建一个 example.i:
%module example
%{
#include "example.h"
%}
%include "example.h"
确保 swig 在你的路径中,然后执行:
%swig -java example.i
然后你需要构建一个原生的java库,比如它是如何完成的here,(注意你不需要做所有javah的东西),但基本上:
% g++ -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32"
-shared -o example.dll example.c example.cpp
它为您提供了您的 dll,当 运行 您的 java 程序时,您必须将其与任何其他依赖库保持一致。请注意,如果您编译 32 位库,则需要使用 32 位 jvm。
问题 我正在开发一个自定义硬件控制器,我想在 Java 中对其进行处理后将其输入映射到虚拟 XInput 控制器。基本上出于所有意图和目的,我想直接从 java.
控制 XInput 控制器我想到的解决方法
- 编写设备驱动程序,这似乎是我很乐意避免的真正痛苦。我以前从未编写过设备驱动程序,也不知道如何注册 XInput 控制器。看来这要花很长时间,我没有也不想花的时间。
- 使用 PPJoy 和 this 库。我想避免这种情况,因为 PPJoy 非常过时(距离我能找到的上次更新已经超过 10 年)并且需要一个额外的层来将 DirectInput 转换为 XInput。库也拒绝为我编译。
- 为 VJoy 开发包装器。然而,这将需要从 DirectInput 重新映射到 XInput。我不熟悉 C/C++ 包装,但到目前为止这似乎是最好的选择。
有没有人知道如何解决这个问题?我考虑过跳过 XInput 并使用 Robot (AWT) keyboard/mouse 来完成它,但游戏拒绝获取软件输入,很可能它们只读取硬件数据。模拟 keyboard/mouse 会很好,但不是最佳选择,因为它会很尴尬,但是我无法找到一种游戏可以识别的方法。感谢所有帮助!
写一个包装器,你不需要知道任何,如果你真的不想,我会重复任何 C++ 代码。只需使用 swig. There are plenty of examples, start with something basic。 (请注意,我不打算包括示例,因为那里已经有足够的东西了)。有问题可以留言,我会帮你解决的。
编辑 好的,我会很好,简单的例子,假设你有一个 example.h 文件,在相同的位置创建一个 example.i:
%module example
%{
#include "example.h"
%}
%include "example.h"
确保 swig 在你的路径中,然后执行:
%swig -java example.i
然后你需要构建一个原生的java库,比如它是如何完成的here,(注意你不需要做所有javah的东西),但基本上:
% g++ -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32"
-shared -o example.dll example.c example.cpp
它为您提供了您的 dll,当 运行 您的 java 程序时,您必须将其与任何其他依赖库保持一致。请注意,如果您编译 32 位库,则需要使用 32 位 jvm。