Нет простого сопоставления между ключами и символами. Раскладки клавиатуры могут работать по-разному. Одним из примеров являются мертвые ключи. И как только вы попадаете в IME, все становится еще сложнее. Не пытайтесь дублировать раскладку клавиатуры вручную в вашем приложении.
Если вы хотите узнать, какой символ вводил пользователь, обрабатывайте WM_CHAR
, а не WM_KEY_DOWN/UP
. Он отображается как Control.KeyPress
событие в winforms.