Перевод значения символа в код клавиши

 

Если нажимать на клавиатуре 1 кнопку с буквами "S s Ы ы", lparam в OnChartEvent будет давать значение 83 независимо от языка и регистра.

Если использовать StringGetCharacter, он будет давать различные значения для каждого символа:

string text, sssss = "SsЫы"; int length = StringLen(sssss);
for(int i = 0; i < length; i++) text += string(StringGetCharacter(sssss,i)) + " " + ShortToString(StringGetCharacter(sssss,i)) + (i < length - 1 ? ", " : "");
Print(text);

Результат:

83 S, 115 s, 1067 Ы, 1099 ы

Видно, что 83 только у S.

Возможно как-нибудь для каждого символа на кнопке получить значение кода клавиши этого символа (не в OnChartEvent), т.е. в данном случае для каждого из символов "S s Ы ы" получить 83?

 
У каждой клавиши есть свой скан-код.
 
Ihor Herasko #:
У каждой клавиши есть свой скан-код.

Как это может помочь в моём вопросе? Не понимаю.

 
Andrei Iakovlev #:

Как это может помочь в моём вопросе? Не понимаю.

Составляете массив (таблицу) соответствий скан-кодов и символов. По массиву осуществляете поиск нужного скан-кода. Технически решение достаточно простое. Сложность лишь в том, чтобы скрупулезно составить такой массив, ничего не пропустив. Требуется внимательно обработать все таблицы по приведенной ссылке.

Со своей стороны я не понимаю, зачем это нужно. Обычно решается обратная задача: по скан-коду определить код символа. А вот зачем переводить символ в скан-код, не могу даже представить.

 
Ihor Herasko #:

Составляете массив (таблицу) соответствий скан-кодов и символов.

Если универсального способа нет, то я, конечно, не буду этого делать, хотя бы потому что символы могут быть какие-угодно, это я для примера привёл рус. и англ. буквы.

Ihor Herasko #:

А вот зачем переводить символ в скан-код, не могу даже представить.

Задаю во входных параметрах символы, при нажатии клавиши которых обрабатывается событие в OnChartEvent. В настоящее время использую TranslateKey, чтобы получить символ с нажатой клавиши, и сравниваю с символами в инпуте. Чтобы клавиша срабатывала при любой раскладке, в инпуте задаю символы на обоих раскладках, напр. "S Ы".

Я думал, что возможно сделать наоборот, из символов в инпуте получить код клавиши, и уже в OnChartEvent следить только за значением lparam.