Да, я использовал MapVirtualKey
метод. Но я ожидал больше подробностей о том, как его использовать: какую директиву DllImport
использовать, что enum
характерно для сопоставления с символами и т. Д.
Мне не нравятся эти ответы, когда вы гугляете около 5 секунд, а затем просто предлагаете решение: реальная задача - собрать все воедино и не тратить свое время на тонны пробных страниц MSDN или другие форумы по кодированию, чтобы получить ответ. Не обижайся, но твой ответ (даже хороший) был безупречен, так как я получил этот ответ еще до того, как опубликовал свой вопрос на форуме!
Итак, я собираюсь опубликовать то, что искал - готовое решение C #:
1- Поместите эту директиву в вашем классе:
[DllImport("user32.dll")]
static extern int MapVirtualKey(uint uCode, uint uMapType);
2- Получите свой символ следующим образом:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const int WM_KEYDOWN = 0x100;
if (msg.Msg == WM_KEYDOWN)
{
// 2 is used to translate into an unshifted character value
int nonVirtualKey = MapVirtualKey((uint)keyData, 2);
char mappedChar = Convert.ToChar(nonVirtualKey);
}
return base.ProcessCmdKey(ref msg, keyData);
}
Спасибо за заботу ... и наслаждайтесь!