Отправка WM_KEYDOWN / UP хлопотна. Само приложение уже переводит сообщение WM_KEYDOWN в WM_CHAR, используя состояние клавиш-модификаторов (Shift, Alt, Ctrl) и раскладку клавиатуры. Ни один из которых вы не можете контролировать, вы случайно получите неправильный символ.
Просто отправьте сообщения WM_CHAR, установите wparam в код символа. Не нужно беспокоиться о lparam, лишь немногие приложения используют его.