C# 如何使用SendInput()向DirectX应用程序发送密钥?
我需要向DirectX应用程序发送密钥。 我尝试使用SendInput,因为它听说它是除DirectInput钩子之外的最低级的键模拟 问题是,它只适用于Windows应用程序,而不适用于DirectX应用程序。我正在搜索解决方案,发现我必须使用扫描码而不是wVk,并将dwFlags设置为0x0008扫描码C# 如何使用SendInput()向DirectX应用程序发送密钥?,c#,directx,sendinput,C#,Directx,Sendinput,我需要向DirectX应用程序发送密钥。 我尝试使用SendInput,因为它听说它是除DirectInput钩子之外的最低级的键模拟 问题是,它只适用于Windows应用程序,而不适用于DirectX应用程序。我正在搜索解决方案,发现我必须使用扫描码而不是wVk,并将dwFlags设置为0x0008扫描码 private static KEYBDINPUT createKeybdInput(ushort wVK, uint flag) { KEYBDINPUT i = new KEYB
private static KEYBDINPUT createKeybdInput(ushort wVK, uint flag)
{
KEYBDINPUT i = new KEYBDINPUT();
i.wVk = 0;
i.wScan = wVK;
i.time = 0;
i.dwExtraInfo = IntPtr.Zero;
i.dwFlags = flag | (uint)0x0008;
return i;
}
public void Keyboardpress()
{
INPUT[] inp = new INPUT[2];
inp[0].type = 1;
inp[0].U.ki = createKeybdInput(0x41, 0x0000);
inp[1].type = 1;
inp[1].U.ki = createKeybdInput(0x41, 0x0002);
if (SendInput(2, inp, Marshal.SizeOf(typeof(INPUT))) == 0)
{
new Exception("Error: " + Marshal.GetLastWin32Error().ToString());
}
}
它应该向最前台的窗口发送一条消息,但我的directX应用程序对此没有反应。我还尝试在“a”=0x1E的情况下使用DirectX扫描码,但仍然没有更改
但是,它应该与SendInput一起使用。我下载了Glovepie软件来测试这个程序是否可以模拟游戏的关键点。确实如此,有一种方法可以做到这一点,我不认为他们会进入图书馆。经过一些研究,他们似乎也使用SendInputAPI。有人知道我该怎么做才能让它工作吗
非常感谢您的代码存在的问题是,您发送的是字符a 0x41的虚拟密钥代码,而不是扫描代码0x1E 您在dwFlags参数中指定要发送扫描代码。您可以通过两种方式修复代码: 1:从dwFlags中删除0x0008位,设置wScan=0,并在示例中使用wVk发送虚拟密钥代码0x41 2:保持代码原样,但发送0x1E而不是0x41以发送a的扫描代码
如何从虚拟密钥代码中获取扫描代码?使用MapVirtualKey函数。使用您的示例,MapVirtualKey0x41,0将返回0x1E作为扫描代码 我试图使用SPY++监视directx应用程序,但它没有找到任何消息。应用程序似乎使用DirectInput。如何使用directinput向directx应用程序发送密钥?我听说directinput只检测按键,但不模拟按键:出于某种原因,它似乎与keybd_事件一起工作