所以我有一个工作的按键模拟器。它每2秒按一次“W”键。我正在测试使用键'WASD'的游戏但是,当我运行程序并运行我的游戏时,它不会移动我的角色?我必须用物理推W键来移动它。有什么想法吗?
这是我的代码:
#include <iostream>
#define WINVER 0x0500
#include <windows.h>
class KeyBot {
private:
INPUT _buffer[1];
public:
KeyBot();
void KeyUp(char key);
void KeyDown(char key);
void KeyClick(char key);
};
KeyBot::KeyBot() {
_buffer->type = INPUT_KEYBOARD;
_buffer->ki.wScan = 0;
_buffer->ki.time = 0;
_buffer->ki.dwExtraInfo = 0;
}
void KeyBot::KeyUp(char key) {
_buffer->ki.wVk = key;
_buffer->ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, _buffer, sizeof(INPUT));
}
void KeyBot::KeyDown(char key) {
_buffer->ki.wVk = key;
_buffer->ki.dwFlags = 0;
SendInput(1, _buffer, sizeof(INPUT));
}
void KeyBot::KeyClick(char key) {
KeyDown(key);
Sleep(10);
KeyUp(key);
}
int main() {
KeyBot bot;
while (1) {
bot.KeyDown(0x57); //Press and hold 'W'
Sleep(2000); // Wait 2000 ms (2 seconds)
bot.KeyUp(0x37);
}
}
答案 0 :(得分:2)
This thread描述了一个类似的问题 - DirectX输入处理似乎忽略了正常的扫描码;尝试使用他们的DIK_变体,来自dinput.h DirectX标题。