在DirectInput应用程序中用SendInput API模拟键盘
我正在尝试模拟自定义游戏控制器应用程序的键盘命令.因为我需要在直接限制环境中模拟命令,大多数通常的方法不起作用.我知道使用钩子会100%起作用,但我正在尝试找到更轻松的实现. 我已经进行了很多搜索,发现通过使用SendInput API与scancodes而不是虚拟键可以使用,但它的行为似乎就像钥匙是"粘在".我同时发送了键盘和密钥事件,但是当我试图在直接打击环境中发送消息时,游戏的作用似乎是按住密钥. 例如,如果我模拟了" W"键盘,并将该钥匙映射在第一人称射击游戏中,请在"移动前进"动作中,一旦我进入游戏,下面的功能将导致角色向前迈进.但是,仅发出一次命令,它将无限期地向前移动字符. 这是我正在调用的SendInput函数的代码段(在C#中): [DllImport("user32.dll")] static extern UInt32 SendInput(UInt32 nInputs, [MarshalAs(UnmanagedType.LPArray, Si
42 2024-04-11
编程技术问答社区
c++ win32 用直接输入法模拟按键
如何使用DirectInput模拟按键?我目前有初始化(但我不确定是好的): #include #pragma comment (lib, "dinput8.lib") #pragma comment (lib, "dxguid.lib") LPDIRECTINPUT8 din; // the pointer to our DirectInput interface LPDIRECTINPUTDEVICE8 dinkeyboard; // the pointer to the keyboard device BYTE keystate[256]; // the storage for the key-information void initDInput(HINSTANCE hInstance, HWND hWnd); // sets up and initializes DirectInput void detect_input
4 2024-04-08
编程技术问答社区
低级别的鼠标钩和DirectX
我正在构建一个应用程序,该应用程序需要过滤一些鼠标范围内的鼠标.也就是说,我需要让系统在特殊场合忽略一些鼠标按钮. 我使用低级鼠标钩和SetWindowsHookEx来过滤这些点击.除WPF应用程序外,它的工作原理相对较好.我猜那是因为这些应用程序使用DirectX和DirectInput进行输入处理,这就是为什么我无法在这些应用程序中单击过滤,因为它们直接从驱动程序中获取输入. 有什么方法可以在WPF/DirectX应用程序中过滤单击? 我知道,全球过滤点击通常不是好主意,但是这对于我的应用程序至关重要,并且我将确保它不会在游戏和其他程序中过滤.但是WPF应用程序具有普通GUI,因此我也需要过滤它们. 更新 我想我可以通过编写自己的过滤驱动程序来解决这个问题,但是由于我没有写驱动程序的任何经验,请让我知道是否还有其他解决方案. API钩资源 我找到了有关API钩的一些有用的链接.将其用作参考. api钩显示 最终解决方案 wp
28 2024-01-04
编程技术问答社区
引用.dll文件时的错误信息
我希望我的XNA游戏中使用DirectInput,但是在引用.dll文件时我有问题.我正在使用Microsoft Visual Studio C#Express Edition.这正是我要做的: 右键单击"参考" 选择"添加参考" 导航到.dll文件并点击OK i然后收到以下错误: 如上所述,我想引用microsoft.directx.directInput名称空间,但我不知道它在哪个.dll文件中,所以我只是选择了" d3dref9.dll".该目录下的每个.dll文件都无法使用,因此我选择的任何一个都会给我相同的错误.现在,我已经能够使用其他.dll文件来完成此操作,但是由于某种原因,DirectX One无法正常工作.我知道可能是beacuse this 家伙只是看第二个在他的代码中行. 我已经安装了DirectX SDK,为什么不能引用任何.dll文件,如何制作它以便我可以? 谢谢! 解决方案 这里的问题是,您正在添加对本机DLL的引用,
18 2023-12-23
编程技术问答社区
捕捉全局热键(Windows)
现在,我一直在尝试像推销语音聊天应用程序一样创建类似的功能,但是到目前为止,我还找不到任何合适的解决方案.我不使用MFC或Clr. 问题很简单.我的窗口通常应该不合时宜(即最小化等),但是我需要对按键(基本上,我什至不想知道按钮是否被固定下来).不幸的是,wm_keydown仅在窗口具有键盘焦点时才有效.我确实知道,例如,TeamSpeak使用DirectInput为此,但我也知道它绝对可以没有它,我非常喜欢. 我可以做出的唯一其他解决方案是用getAsynckeystate进行轮询,但看起来这也不是一个很好的解决方案.如果可能的话,我仍然更喜欢使用Windows消息. 解决方案 可以用 RegisterHotKey(Cody Gray在赞扬中建议的)可能是这里更合适的选择. 其他解决方案 我同意乔恩.使用user32.dll和registerHotkey函数.非常有用的示例代码位于以下位置: https:///www.codeproject. com/kb/
44 2023-12-07
编程技术问答社区
2个鼠标,在windows上只捕捉一个鼠标(DirectInput、DDK、Linux,任何东西)。
我已经将2只小鼠连接到PC,希望一只鼠标能够作为常规鼠标工作,并专门捕获第二个鼠标. 首先,我正在尝试直接引导.它在InstancEname中显示了2个带有Word Mouse的设备. 但是只有一个设备具有deviceType.Mouse,它只是真正有效的设备. 当我获得时,它正在阻止两只小鼠. 第二我决定创建驱动程序.我下载了温德克.有鼠标过滤器驱动程序样品. 我能够编译它. 但是我不是驾驶员程序员.我理解这很复杂,但是它具有与PS/2鼠标有关的一些代码.我所有的老鼠都是USB. 应使用.inf文件安装.我更喜欢动态加载. 我不太确定它是正确的方向. 我是为我的业余爱好机器人项目而做的.我希望PC从鼠标作为传感器中获取一些信息. 我认为必须有现有的类似项目或解决方案. 我的桌子上也有Linux PC.将鼠标连接到Linux和分析可能更好 /dev/input/mouse0 /dev/input/mouse1 /dev/input/mouse2 看
8 2023-12-06
编程技术问答社区
如何确定DirectInput中的键盘已断开连接
我正在使用Enumdevices监视HID连接(...,Doughfl_attachedonly).当我断开游戏控制器连接时,它不再出现在回调中.但是,当我断开键盘连接时,它仍然显示在枚举中. 我已经浏览了API,但是如果连接设备,我看不到其他地方查询. 解决方案 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363432%28v=vs.85%299.aspx 您可以订阅任何设备通知,例如附件,分离等...
22 2023-12-04
编程技术问答社区
c++ win32 用直接输入法模拟按键
如何使用DirectInput模拟按键?我目前有初始化(但我不确定是好的): #include #pragma comment (lib, "dinput8.lib") #pragma comment (lib, "dxguid.lib") LPDIRECTINPUT8 din; // the pointer to our DirectInput interface LPDIRECTINPUTDEVICE8 dinkeyboard; // the pointer to the keyboard device BYTE keystate[256]; // the storage for the key-information void initDInput(HINSTANCE hInstance, HWND hWnd); // sets up and initializes DirectInput void detect_input
84 2023-12-04
编程技术问答社区
c++ win32 用直接输入法模拟按键
如何使用DirectInput模拟按键?我目前有初始化(但我不确定是好的): #include #pragma comment (lib, "dinput8.lib") #pragma comment (lib, "dxguid.lib") LPDIRECTINPUT8 din; // the pointer to our DirectInput interface LPDIRECTINPUTDEVICE8 dinkeyboard; // the pointer to the keyboard device BYTE keystate[256]; // the storage for the key-information void initDInput(HINSTANCE hInstance, HWND hWnd); // sets up and initializes DirectInput void detect_input
46 2023-12-04
编程技术问答社区
直接输入8的EnumDevices有时慢得令人痛苦
有时(在约50%的运行中),枚举需要5-10秒才能返回.通常这几乎是即时的.我找不到有关这种行为的其他报告. 当事情变得慢时,可以通过观看stdout来概括:) std::cout EnumDevices(DI8DEVCLASS_GAMECTRL, MyCallback, NULL, DIEDFL_ATTACHEDONLY); std::cout
12 2023-11-26
编程技术问答社区
Python DirectInput 鼠标相对移动行为不符合预期
我找到了通过DirectInput模拟小鼠运动的解决方案.要点是使用Python脚本在3D游戏中导航字符.这意味着必须使用相对鼠标运动. Everything was working but when i try calculate relationship between x Units (in MouseMoveTo function) and Angle character turn in game, I found out that aritmetics did不起作用很好. 例如: 当我移动鼠标时 2 x 200单元左然后 1 x 400单位右字符不在同一方向(如果在桌面中,光标不在同一位置) 2x200 如果我尝试动画运动(例如将运动分为50步),它会变得更糟. 我在做错事还是正常行为?如果是正常的行为,我有什么办法可以计算以纠正传递到()的单位数量? ? import ctypes import time # C struct
34 2023-07-14
编程技术问答社区
如何使pynput和ctypes不发生冲突?
我正在此网站上的某个地方使用此宝石. import ctypes import pynput SendInput = ctypes.windll.user32.SendInput W = 0x11 A = 0x1E S = 0x1F D = 0x20 # C struct redefinitions PUL = ctypes.POINTER(ctypes.c_ulong) class KeyBdInput(ctypes.Structure): _fields_ = [("wVk", ctypes.c_ushort), ("wScan", ctypes.c_ushort), ("dwFlags", ctypes.c_ulong), ("time", ctypes.c_ulong), ("dwExtraInfo", PUL)] class
62 2023-07-14
编程技术问答社区
DirectX游戏挂钩
我正在尝试模拟游戏中的鼠标事件.游戏使用DirectInput,因此您不能使用SendMessage将鼠标事件/键盘事件发送到它,这基本上就是为什么我必须挂在游戏中. 也我不想使用sendInput/鼠标_Events,游戏必须在后台运行并进行鼠标事件. 我已经设法在游戏中制作了DLL钩,但是现在下一个问题是我必须制作鼠标事件和键盘(可能是主要问题). 预先感谢. 解决方案 而不是挂接游戏,您可以使用 glovepie ,这是kernel-level-level输入模拟器.您可以写下自己的脚本,然后使用它.因此,您需要将消息与您的应用程序发送到GlovePie,并在内核级别生成输入,因此这将在DirectX Games中起作用.
36 2023-02-24
编程技术问答社区
我应该使用DirectInput还是Windows消息循环?
我正在开发C ++ DirectX 2D游戏,我需要键盘和鼠标输入. 维基百科说: Microsoft建议使用新应用程序使用Windows消息循环键盘和鼠标输入而不是DirectInput 那么我应该如何使用它? 我有一个游戏屏幕类,请注意绘图和更新(游戏逻辑),我将Windows消息循环中的绘图和更新方法称为. 谢谢 解决方案 由于您几乎必须运行消息泵才能拥有一个窗口,因此您也可以使用该泵来处理键盘和鼠标输入.无论您是将键盘事件手动到子窗口,都完全取决于您的泵,如果您愿意,您都可以在泵中处理它们. 您的典型消息泵看起来像这样: while (GetMessage(&msg, NULL, 0, 0)) { if (WM_QUIT == msg.message) break; TranslateMessage(&msg); // post a WM_CHAR message if this is a WM_KEYDOW
38 2023-02-24
编程技术问答社区
用Python模拟XBox控制器的输入
我希望我的 python 程序模拟一个 Xbox 控制器输入.如果可能的话,模拟拇指摇杆和开/关按钮. 我找到了关于在 python 中使用 ctypes 模拟键盘输入的主题,例如这里:Python 模拟按键操作 是否可以模拟它类似于普通键盘或鼠标上的“keydown"? 解决方案 万一遇到同样问题的人会找到这个帖子: 我用 vJoy、pyVJoy 和 x360ce 解决了这个问题. vJoy 提供 SDK 和驱动程序来模拟输入设备.你可以有操纵杆、游戏手柄等.PyvJoy 允许您访问这些驱动程序并在 python 中模拟输入.https://github.com/tidzo/pyvjoypyvJoy 使用 0 到 32767 之间的值作为“模拟"摇杆.例如,要让 Xbox 控制器的左摇杆处于中间位置,请将 XAxis 和 YAxis 放在 32767 的 1/2 中. 所以对于我来说,输入值介于 0 和 1 之间,我将它们乘以这个值.在我的代码中,
1554 2022-08-13
编程技术问答社区
C# DirectInput SendInput对游戏没有影响
我需要一些有关 DirectInput 的帮助,我会告诉你我想要做什么.当我只按一个键时,我想做我的程序将组合键发送到游戏.示例:我将按“r",它将按“1"、“3"、“2"、“4"键.我从这里找到了一些代码.但它们并没有完全发挥作用. public static void Send_Key_Hold(short Keycode) { INPUT[] InputData = new INPUT[1]; InputData[0].type = 1; InputData[0].ki.wScan = Keycode; InputData[0].ki.dwFlags = (int)(KEYEVENTF_SCANCODE); SendInput(1, InputData, Marshal.SizeOf(InputData[0])); } public static void Send_
1190 2022-07-19
编程技术问答社区
使用SendInput包装器向DirectX应用程序发送击键时出现问题
一段时间以来,我一直在尝试将按键发送到 DirectX 应用程序,并且一直在删除.我是 C# 的新手,所以一些更复杂的函数就在我的脑海中,但我一直在尽力将它们拼凑起来. SendInput 是我似乎无法理解的事情之一. 我尝试使用一些不同的 SendInput 包装器来简化操作,包括: http://inputsimulator.codeplex.com/ http://www.codeproject.com/Articles/117657/InputManager-library-Track-user-input-and-simulate 还有一个叫拦截器 它们都会向大多数应用程序发送按键,但我仍然无法让它们发送到活动的游戏窗口. 我也尝试过 SendKeys. 我曾尝试自己放置一个键盘挂钩,但它太先进了,我自己无法弄清楚,我的代码最终充满了错误. 我希望如果我在这里发布我的代码(简单的服务器应用程序),有人可以向我解释键盘挂钩的位
194 2022-07-19
编程技术问答社区
带有C++和DirectInput的USB操纵杆
我一直在尝试从 USB 操纵杆读取数据(x/y 轴、按下的按钮等),并且听说过 DirectInput.一直在寻找一个不错的例子或演练,但收效甚微.如果有人可以分享一个简单的教程,或者引导我到正确的地方,我会欠你的.谢谢 编辑:试图在 Windows 平台上实现这一目标 解决方案 在 DirectX SDK、源代码和编译的二进制文件中有一些 DirectInput 示例.包括 Joystick 样本.旧版本的 SDK(查找“DirectX 9.0 SDK",大约 2004-2005 年)有更多的样本,多达十几个! 操纵杆示例 说明 Joystick示例程序获取并显示joystick数据. 路径源:(SDK 根目录)\Samples\C++\DirectInput\Joystick 可执行文件:(SDK 根目录)\Samples\C++\DirectInput\Bin\Joystick.exe 用户指南 观察显示的数据在您移动和移动时如何变化扭动
1172 2022-07-19
编程技术问答社区