Просто для того, чтобы изложить это для тех, кто сталкивается с этим. Я добавил KEYEVENTF_UNICODE и удалил KEYEVENTF_SCANCODE.
KEYEVENTF_UNICODE 0x0004 Если указано,
система синтезирует VK_PACKET
нажатие клавиши. Параметр wVk должен быть
нуль. Этот флаг можно комбинировать только
с флагом KEYEVENTF_KEYUP. За
больше информации, см. примечания
раздел.
1012 * MSDN *
Образец должен вывести «aa».
#include <windows.h>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
INPUT input[4];
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 0;
input[0].ki.wScan = L'a';
input[0].ki.dwFlags = KEYEVENTF_UNICODE ;
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = 0;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0;
input[1].ki.wScan = L'a';
input[1].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_UNICODE ;
input[1].ki.time = 0;
input[1].ki.dwExtraInfo = 0;
input[2].type = INPUT_KEYBOARD;
input[2].ki.wVk = 0;
input[2].ki.wScan = L'a';
input[2].ki.dwFlags = KEYEVENTF_UNICODE ;
input[2].ki.time = 0;
input[2].ki.dwExtraInfo = 0;
input[3].type = INPUT_KEYBOARD;
input[3].ki.wVk = 0;
input[3].ki.wScan = L'a';
input[3].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_UNICODE ;
input[3].ki.time = 0;
input[3].ki.dwExtraInfo = 0;
SetConsoleTitle(L"TESTING");
ShowWindow(FindWindow(NULL, L"TESTING"),SW_MINIMIZE );
int retval = SendInput(4, input, sizeof(INPUT));
if(retval > 0)
{
_tprintf(_T("SendInput sent %i"), retval);
}
else
{
_tprintf(_T("Unable to send input commands. Error is: %i"), GetLastError());
}
return 0;
}