我尝试做的是发送alt代码alt + 1,其中=☺与发送输入。所以我必须按住atl,按下numpad 1,然后放开alt。目前,当代码运行时,它会保持alt按钮,但没有输出到活动窗口(记事本)。我验证了sendinput正在使用关键组合(ctrl + a)工作。在此程序运行时打开Num lock。 alt + f也有效。我认为问题是它可能发送'1'而不是numpad'1',这不适用于alt代码。
Sleep(1000 * 3);
INPUT tabinput[4];
tabinput[0].type = INPUT_KEYBOARD;
tabinput[0].ki = { VK_LMENU, 0 };
tabinput[1].type = INPUT_KEYBOARD;
tabinput[1].ki = { VK_NUMPAD1, 0 };
tabinput[2].type = INPUT_KEYBOARD;
tabinput[2].ki = { VK_NUMPAD1, 0, KEYEVENTF_KEYUP };
tabinput[3].type = INPUT_KEYBOARD;
tabinput[3].ki = { VK_LMENU, 0, KEYEVENTF_KEYUP };
SendInput(4, tabinput, sizeof(INPUT));
getchar();
答案 0 :(得分:0)
您可以直接使用Unicode字符。如果代码点小于0xFFFF
,请使用:
input.ki.wScan = L'☺';
某些字符的代码点大于0xFFFF
,每个代码点需要两个关键笔划,在这种情况下使用宽字符串来处理它:
const wchar_t *buf = L"বাংলা ☺ Abc";
std::vector<INPUT> vec;
for(size_t i = 0, len = wcslen(buf); i < len; i++)
{
INPUT input = { 0 };
input.type = INPUT_KEYBOARD;
input.ki.dwFlags = KEYEVENTF_UNICODE;
input.ki.wScan = buf[i];
vec.push_back(input);
input.ki.dwFlags |= KEYEVENTF_KEYUP;
vec.push_back(input);
}
SendInput(vec.size(), vec.data(), sizeof(INPUT));
答案 1 :(得分:-1)
以下代码可用于键入unicode字符 使用http://www.unicodemap.org/search.asp查找正确的代码
INPUT tabinput[2];
tabinput[0].type = INPUT_KEYBOARD;
tabinput[0].ki.dwFlags = KEYEVENTF_UNICODE;
tabinput[0].ki.wVk = 0;
tabinput[0].ki.wScan = 0x00E1; // This is a Bengali unicode character
tabinput[1].type = INPUT_KEYBOARD;
tabinput[1].ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
tabinput[1].ki.wVk = 0;
tabinput[1].ki.wScan = 0x00E1; // This is a Bengali unicode character
SendInput(2, tabinput, sizeof(INPUT));