特殊字符 keybd_event C++
special characters keybd_event c++
我有一个带有特殊字符的字符串,像这样 std::string test = "hello é -";
我想用 keybd_event
写这个字符串,但特殊字符显示不佳。
我这样做:
std::string result = "Hello é -";
int taille = result.size ();
for (int i = 0 ; i < taille ; i++)
{
keybd_event(VkKeyScan(result.at(i)),0x9e,0 , 0);
keybd_event(VkKeyScan(result.at(i)),0x9e, KEYEVENTF_KEYUP,0);
}
我做了一些研究,发现 std::wstring
适用于 unicode,但即便如此它也不起作用,知道吗?
您需要使用SendInput()
而不是keybd_event()
,例如:
std::wstring result = L"Hello é -";
int taille = result.size ();
std::vector<INPUT> inputs(taille);
for (int i = 0; i < taille; ++i)
{
INPUT &input = inputs[i];
input.type = INPUT_KEYBOARD;
input.ki.wVk = 0;
input.ki.wScan = result.at(i);
input.ki.dwFlags = KEYEVENTF_UNICODE;
input.ki.time = 0;
input.ki.dwExtraInfo = GetMessageExtraInfo();
}
SendInput(inputs.size(), &inputs[0], sizeof(INPUT));
我有一个带有特殊字符的字符串,像这样 std::string test = "hello é -";
我想用 keybd_event
写这个字符串,但特殊字符显示不佳。
我这样做:
std::string result = "Hello é -";
int taille = result.size ();
for (int i = 0 ; i < taille ; i++)
{
keybd_event(VkKeyScan(result.at(i)),0x9e,0 , 0);
keybd_event(VkKeyScan(result.at(i)),0x9e, KEYEVENTF_KEYUP,0);
}
我做了一些研究,发现 std::wstring
适用于 unicode,但即便如此它也不起作用,知道吗?
您需要使用SendInput()
而不是keybd_event()
,例如:
std::wstring result = L"Hello é -";
int taille = result.size ();
std::vector<INPUT> inputs(taille);
for (int i = 0; i < taille; ++i)
{
INPUT &input = inputs[i];
input.type = INPUT_KEYBOARD;
input.ki.wVk = 0;
input.ki.wScan = result.at(i);
input.ki.dwFlags = KEYEVENTF_UNICODE;
input.ki.time = 0;
input.ki.dwExtraInfo = GetMessageExtraInfo();
}
SendInput(inputs.size(), &inputs[0], sizeof(INPUT));