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
所以有人可以告诉我如何模拟例如在游戏中的左箭头键的按下?
SendInput
SendInput可以模拟按键。您可以选择使用虚拟键码或扫描码来识别键(请参阅KEYBDINPUT.dwFlags)。显然,DirectInput忽略了虚拟键码,但会处理扫描码。
总之,使用SendInput扫描码和DirectInput将作出回应。
拦截
的工具模拟了内核模式驱动程序以及一些用户模式辅助功能按键。
存在一些安全隐患。由于它是一个封闭的内核模式驱动程序,因此您需要完全信任作者。即使作者完全可以信任,驱动程序也允许对输入进行监视和创建,因此会带来一个很大的安全漏洞:任何未授权的软件都可以使用它来嗅探,例如提升密码。它也可以阻止包括CTRL + ALT + DEL在内的键盘输入。
上the github page意见认为它还没有在Windows 8工作
您自担风险使用它。
这是一个很好的方法,但是我发现使用SendInput而不是虚拟键发送扫描码直接输入也可以检测到“按键”。它只是没有足够的文件记录足够的地方,在我给百位代表之前,我会请你更新你的答案,因为没有其他答案。 – 2013-03-07 08:29:04
@GamErix干杯,我已经做到了。 – arx
我是否理解这个权利:您想模拟不属于您的游戏的键盘和鼠标输入? –
对,就像一个绑定。我的意思是,例如,如果你按下Y,它应该做同样的事情,当我按下键盘上的Shift + Q。 KeyPress()和keybd_event()不起作用,这就是为什么我需要使用DirectInput。 – Gaboros
DirectInput已弃用,keybd_event()也是如此。你有没有尝试过使用SendInput()?虽然我可以想象,问题不仅在于发送输入,而且还在接收,而另一个程序的重点。 –