C++ win32使用DirectInput模拟按键

问题描述:

如何使用DirectInput模拟按键?我现在有初始化(但我不知道是好还是不好):C++ win32使用DirectInput模拟按键

#include <dinput.h> 

#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(void); // gets the current input state 
void cleanDInput(void); // closes DirectInput and releases memory 

所以有人可以告诉我如何模拟例如在游戏中的左箭头键的按下?

+0

我是否理解这个权利:您想模拟不属于您的游戏的键盘和鼠标输入? –

+0

对,就像一个绑定。我的意思是,例如,如果你按下Y,它应该做同样的事情,当我按下键盘上的Shift + Q。 KeyPress()和keybd_event()不起作用,这就是为什么我需要使用DirectInput。 – Gaboros

+1

DirectInput已弃用,keybd_event()也是如此。你有没有尝试过使用SendInput()?虽然我可以想象,问题不仅在于发送输入,而且还在接收,而另一个程序的重点。 –

SendInput

SendInput可以模拟按键。您可以选择使用虚拟键码或扫描码来识别键(请参阅KEYBDINPUT.dwFlags)。显然,DirectInput忽略了虚拟键码,但会处理扫描码。

总之,使用SendInput扫描码和DirectInput将作出回应。

拦截

的工具模拟了内核模式驱动程序以及一些用户模式辅助功能按键。

存在一些安全隐患。由于它是一个封闭的内核模式驱动程序,因此您需要完全信任作者。即使作者完全可以信任,驱动程序也允许对输入进行监视和创建,因此会带来一个很大的安全漏洞:任何未授权的软件都可以使用它来嗅探,例如提升密码。它也可以阻止包括CTRL + ALT + DEL在内的键盘输入。

the github page意见认为它还没有在Windows 8工作

您自担风险使用它。

+1

这是一个很好的方法,但是我发现使用SendInput而不是虚拟键发送扫描码直接输入也可以检测到“按键”。它只是没有足够的文件记录足够的地方,在我给百位代表之前,我会请你更新你的答案,因为没有其他答案。 – 2013-03-07 08:29:04

+0

@GamErix干杯,我已经做到了。 – arx