Итак. Буду скорее всего azerty клаву модифицировать под русский. Начальный offset 3ef440.
Структура в принципе достаточно проста. Каждую кнопку представляют 4 двойных слова(4*4 байта).
1 - тип кнопки.(BE)
2 - utf код основного символа (LE)
3 - utf код дополнительного символа. (LE)
4 - некий адрес. Хз что и куда ведёт (LE)
Дальше не очень всё понятно...
1. Тип кнопки по ходу 2 младших байта.
Младший тип кнопки (BF - отсутствие кнопки, 3F обычная кнопка, есть ещё 40, но я пока не понял что означает)
Второй класс ширины, но я не уверен. (80 обычная ширина, С0 длинная, А0 пробел)
2,3 - Если в старшем байте (самы правый в LE) 01 то это ссылка на статический массив строк где-то выше, т.е. не фактический символ, а некое действие(шифты, энтеры, эмотиконы, .com и т.д.)
Так же Если основной символ считается системой региональным, то шифт печатает его большой вариант, а доп символ набирается с помощью переключения на символьную клаву. Если он считается не региональным то шифт набирает доп. символ а переключение на клаву доп символов не играет никакой роли.
Кнопок в каждой строке может быть до 12.
Нижняя строка повторяется несколько раз, т.к. в разных местах она разная. Т.е. для веб строки появляются слеш и .com, для почты собака и т.д.
Исходя из этого мы можем сделать полноразмерную русскую клаву без Ъ, который перенесётся к пробелу.
Но! Пока остаётся проблема того, что система не считает русские буквы региональными и из-за этого маленькие печатаются нормально, шифт печатает доп символ а капс набирает большую русскую букву. Это не мсовсем будет удобно поэтому смотрю как это решить сейчас.
UPD: Чтобы представляли что значит нерегиональные клавиши
Ссылка на фоткуUPD2: 4. - это ссылка на строку с доп символами (на удержание), которые я описывал в одном из предыдущих постов.