Существует функция SendInput , которая может генерировать нажатия клавиш и другие виды ввода. Я использовал для создания приложений, похожих на виртуальные клавиатуры.
Пример использования Unicode:
// This may be needed
// #define _WIN32_WINNT 0x0501
#include <windows.h>
#include <winuser.h>
void pressKey(WORD a_unicode)
{
KEYBDINPUT kbinput;
ZeroMemory(&kbinput, sizeof(kbinput));
kbinput.wScan = a_unicode;
kbinput.dwFlags = KEYEVENTF_UNICODE;
kbinput.time = 0;
INPUT input;
ZeroMemory(&input, sizeof(input));
input.type = INPUT_KEYBOARD;
input.ki = kbinput;
SendInput(1, &input, sizeof(input));
}