特殊字符keybd_event c ++

时间:2015-11-13 09:28:30

标签: c++ string winapi unicode keyboard

我有一个带有特殊字符的字符串,例如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,但即便如此,它也不起作用,任何想法?

1 个答案:

答案 0 :(得分:1)

您需要使用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));