Цитата Сообщение от Vamos Посмотреть сообщение
Alex_K, вопрос, а сложно сделать вариант некоего терминального режима для клавиатуры. Сейчас, как я понимаю, эмулятор перехватывает и обрабатывает скэн коды, сделать так чтобы эмулятор получал уже код символа. Тогда и копья ломать не будем по поводу раскладки.
Эмулятор эмулирует аппаратуру, а уже скэн-коды обрабатывает программа с ПЗУ. Эта программа обработки и формирует коды КОИ-8 для терминального режима. Так что вряд ли это возможно, всё-таки эмулятор это эмулятор, а не симулятор. Тут придется воткнуть в эмулятор всю логику драйвера клавиатуры. А если какой-то резидент перехватывает адреса подпрограмм обработки клавиатуры и канала 0, адрес точки входа в драйвер в диспетчере процессов?
Так что лучше иметь раскладку для передачи скэн-кодов. Таблиц надо всего семь (не десять, как я писал когда-то): основной регистр ЛАТ, основной регистр РУС, нижний регистр ЛАТ, нижний регистр РУС, ГРАФ-регистр (по раскладке лучше как РУС), УПР-регистр и ФИКС-регистр.
Можно сделать диалог настройки, тогда каждый будет настраивать по своему усмотрению, но в интерфейсе я не силен, тут надо просить Никиту. В этом случае можно будет отключать таблицы перекодировки, включать автоопределение по значениям в ячейках ОЗУ или на время ставить свою принудительно.

P.S. Есть еще проблема с клавишей Numpad Enter. Клавиатура опрашивается с помощью функции GetKeyboardState, там можно отличить левые и правые Shift-ы, Ctrl-и, Alt-ы, а вот отличить главный Enter от Numpad Enter нельзя. Придется наверное ставить хук, чтобы асинхронно перехватывать события по нажатиям и формировать отдельно флаги для Enter-ов.