Como converter um código de chave virtual em um caractere de acordo com o layout atual do teclad

Procurei várias perguntas anteriores sobre isso, e a melhor resposta que encontrei até agora é algo como isto:

(char) WinAPI.MapVirtualKey((uint) Keys.A, 2)

No entanto, isso não funciona de duas maneiras:

Sempre retorna letras maiúsculas. ParaKeys.A Espero conseguir o personagema enquanto que paraKeys.A | Keys.ShiftKey Espero conseguirA; no entanto, parece que receboA para ambos

Parece não levar em consideração os layouts de teclado. Por exemplo, paraKeys.OemMinus Parece que sempre entendo o personagem-, mesmo que o layout atual do teclado seja alemão, onde espero que essa tecla retorneß.

Qual é a solução correta para isso?

questionAnswers(3)

yourAnswerToTheQuestion