从字符串输入在 C++ 中使用 KeyPress 会产生错误

Using KeyPress in C++ from string input creates errors

已解决:检查

中的void SendInputString( std::wstring &str)函数

我正在用 C++ 开发一个可执行文件,可以给它一个字符串作为命令行参数,它将模拟键盘输入;使用按键。

命令行格式:

{program name} {string to reproduce} {time between individual keypresses in ms}

这是我的代码:

#define WINVER 0x0500
#include <windows.h>

void chartype(char x , INPUT  &input, unsigned int pause_time){

    input.ki.wVk=VkKeyScanA(x);
    //Verifies character and allots the key to the keyboard 

    //cout<<x; //Old check code 


    Sleep(pause_time);
    
    SendInput(1,&input,sizeof(INPUT));
    //To send input  

    return;
}



int main(int argc , char** argv){
    //Initializing a GUI Keyboard Set 
    INPUT input;
    input.type=INPUT_KEYBOARD;

    //Assigning Input Variables
    string str = argv[1];
    size_t n = str.size();
    unsigned int pause_time = stoi(argv[2]);
 
    //Sending individual string characters 
    for(size_t i =0 ; i<n ; ++i){

        chartype(str[i] , input , pause_time);

    }

    //Shutting Keyboard
    input.ki.dwFlags=KEYEVENTF_KEYUP;
    SendInput(1, &input,sizeof(INPUT));
    
    return 0; 
}

但是,字符串并没有完全执行。例如,如果我输入字符串 PASS_INPUT,它会呈现 pass-input。此外,输出对 Caps Lock 是否打开很敏感。

我假设它正在发生,因为它只是模拟按下键盘上的特定键,因此假定一个默认值,但是我希望它显示准确的输出,例如 %9Xa{%9Xa{ 而不是目前正在发生的 59xa[

对不起,如果我不能很好地提出问题。我是这个键盘模拟的新手,无法完全理解该怎么做。

我想知道应该进行哪些修改才能按预期呈现字符串。

可以使用

中的函数 SendInputString( std::wstring &str)