游戏中的键盘模拟[C ++]

时间:2016-06-07 10:00:33

标签: c++ events input

所以我有一个工作的按键模拟器。它每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);
    }
}

1 个答案:

答案 0 :(得分:2)

This thread描述了一个类似的问题 - DirectX输入处理似乎忽略了正常的扫描码;尝试使用他们的DIK_变体,来自dinput.h DirectX标题。