Преобразовать символ в ключи - PullRequest
7 голосов
/ 01 июня 2011

У меня есть специальный символ (/ @), который я хочу преобразовать в ключи.

В настоящее время я использую это:

Keys k = (Keys)'/';

И во время отладки я получаю, что k равнодо:

LButton |RButton |MButton |Назад |Тип пробела - System.Windows.Forms.Keys

Код ключа k предполагался равным 111.

ПРИМЕЧАНИЕ. Код работает для заглавных букв, таких как:

Keys k = (Keys)'Z';

В этом случае код клавиши k равен 90, и это нормально.

Я пытаюсь найти способ конвертировать специальные символы в ключи.(или к их правильному коду ключа)

Попытка отправить ключи глобально, используя:

public static void SendKey(byte keycode)
    {
        const int KEYEVENTF_EXTENDEDKEY = 0x1;
        const int KEYEVENTF_KEYUP = 0x2;
        keybd_event(keycode, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
        keybd_event(keycode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
    }

SendKey((byte)Keys.{SomethingHere});

Ответы [ 6 ]

16 голосов
/ 09 мая 2012

Это старый вопрос, но я использовал это:

Keys k = (Keys)char.ToUpper(c);

Если значение char a (с кодом 97), то преобразование в A (с кодом 65) соответствует Keys.A и т. Д. .

Надеюсь, это кому-нибудь поможет.

3 голосов
/ 01 июня 2011

Вы не можете разыгрывать от char до Keys. Keys - это перечисление флагов, которое показывает, какие физические клавиши нажимаются на клавиатуре. То, что вы пытаетесь, не может быть простой проблемой для решения. Кто скажет, какую клавиатуру использовал пользователь и какое отображение генерирует какой конкретный символ на клавиатуре пользователя и его локаль?

Можете ли вы быть более точным относительно своей цели? Вы пытаетесь научить пользователя печатать специальный символ или что-то еще?

В зависимости от вашего обновления вы должны использовать класс SendKeys .

2 голосов
/ 01 июня 2011

Должно работать!

Ключи o = (Ключи) Enum.Parse (typeof (Ключи), ((int) e.KeyChar) .ToString ());

1 голос
/ 08 апреля 2015

Мой способ работает только с буквами и некоторыми другими клавишами.

string s = char.ToString(e.KeyChar);

Это дает вам строку, эквивалентную ключам. Что-то вроде вывода Keys.ToString(). Так что все, что нам нужно, это преобразовать s в его эквивалентный ключ!

(Keys) Enum.Parse(typeof(Keys), char.ToString(e.KeyChar).ToUpper());

удачи ...

0 голосов
/ 24 июля 2016

На мой взгляд, это идеальное решение с точки зрения читабельности.

Keys key = (Keys) Enum.Parse(typeof(Keys), c.ToString(), ignoreCase: true);
0 голосов
/ 01 июня 2011

Насколько я знаю, нет способа сопоставить перечисление Keys с char.Один задает коды клавиш и модификаторы, полезные для System.Windows.Forms.Control, в то время как другой представляет 16-битный символ Unicode (от U + 0000 до U + ffff).

Ко всем различным концепциям.

...