从字符串输入在 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)
已解决:检查
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)