Translate Keys to char

Quero traduzir um determinado conjunto deSystem.Windows.Forms.Keys eSystem.Windows.Forms.InputLanguage ao @ correspondenSystem.Char.

Tentei algumas experiências comMapVirtualKeyEx, mas agora há uma maneira de considerar o estado do teclado eToUnicodeEx é uma dor comdead keys.

Meu objetivo é uma função ...

static char? FromKeys(Keys keys, InputLanguage inputLanguage)
{
    // As I think what can be helpful and I got trying to find a solution for this problem:
    Keys vkCode = keys & Keys.KeyCode;
    Keys modifiers = keys & Keys.Modifiers;

    byte[] keyboardState = new byte[256];

    keyboardState[vkCode] = 1 << 7;

    if (modifiers.HasFlag(Keys.Shift))
    {
        keyboardState[(int)Keys.ShiftKey] = 1 << 7;
    }

    if (modifiers.HasFlag(Keys.Control))
    {
        keyboardState[(int)Keys.ControlKey] = 1 << 7;
    }

    if (modifiers.HasFlag(Keys.Alt))
    {
        keyboardState[(int)Keys.Menu] = 1 << 7;
    }

    // [Put your code here]
}

... que deve ser chamado assim:

FromKeys(Keys.A | Keys.Shift, InputLanguage.CurrentInputLanguage); // = 'A'
FromKeys(Keys.Escape, InputLanguage.DefaultInputLanguage); // = null
FromKeys(Keys.Oemtilde, InputLanguage.FromCulture(new CultureInfo("de-DE"))); // = 'ö'
FromKeys(Keys.E | Keys.Control | Keys.Alt, InputLanguage.FromCulture(new CultureInfo("de-DE"))); // = '€'

(Esteja ciente deKeys.Shift eKeys.ShiftKey!)

Como seria essa função?

A resposta que escolho deve fornecer uma maneira de traduzir um "normal"System.Windows.Forms.Keys com uma combinação opcional dos modificadores Keys.Shift, Keys.Alt, Keys.Control) para umSystem.Char. Várias chamadas sucessivas devem resultar no mesmo caractere. Sem layouts de teclado codificados, oInputLanguage define o layout a ser usado.

Como uma ajuda para entender o que estou tentando: Gerar umKeyPressEventArgs apenas com oKeyEventArgs (e o @ correInputLangauge) fornecid

Dead keys não deve afetarFromKeys!

questionAnswers(2)

yourAnswerToTheQuestion