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
!