2016-06-07 158 views
-1

所以我有一个工作的按键模拟器。它每2秒按一次键“W”。我正在使用密钥“WASD”进行游戏测试,但是当我运行程序并运行游戏时,它不会移动我的角色?我必须身体推W键才能移动它。任何想法为什么?按键模拟游戏[C++]

这里是我的代码:

#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

我们可能需要看到实际为您处理输入的代码... –

+0

@AurelBílý你是什么意思?这是我拥有的唯一代码。 – thetester2

+0

@AurelBílý我是否必须将该输入发送到游戏中才能使用?对不起,编程很新。 – thetester2

回答

2

This thread描述了一个类似的问题 - 的DirectX输入处理似乎忽视了正常的扫描码;尝试使用dinput.h DirectX头文件中的DIK_变体。