Если кто знает, то подскажите, пожалуйста. Чем отличается сканкод клавиши от позиционного кода клавиши? И как считать позиционный код?
А что такое позиционный код применительно к клавиатурам ПК? Что-то не слышал, чтобы сей термин употреблялся...
Каждое нажатие или отпускание клавиши вызывает прерывание. Программа, обслуживающая это прерывание, читает scan-код и преобразует его в два байта. Первый байт содержит символьный ASCII код, а второй - позиционный код. Первый байт получается преобразованием позиционного кода клавиши по определённой процедуре в зависимости от состояния клавиш Shift, Alt, Ctrl, Caps Lock и Num Lock, от режима латиница или кириллица и от раскладки клавиатуры в символьный (ASCII) код. Для специальных клавиш, например функциональный или клавиш управления курсором, код ASCII равен нулю. Это позволяет программе различать обычные печатные символы и нажатия других клавиш. Так вот и остается вопрос, а как же этот позиционный код считать?
А, вот о чём речь... До меня и не дошло, сразу мысля в дебри полезла (насчёт физического положения клавиши в матрице). Помнится, функции BIOS сообщают как раз двухбайтовый код клавиши -- как раз ASCII-код и этот самый позиционный, причём в случае спецклавиш вроде стрелок ASCII-код будет равен нулю. Так что можно глянуть эти функции (мне самому сейчас смотреть затруднительно, потому что на выезде, а не дома). Ну а если речь о Винде, то глянуть, в каком именно виде она передаёт код нажатой клавиши в событиях, связанных с клавиатурой.
вероятно позиционный код это код клавиши без учета регистра и раскладки (то есть было нажато shift+ш в русской раскладке то этот код будет "i", а ascii код - "Ш", а если например нажато было Num1 то этот код будет специальный код этой клавиши, а ascii код будет или "1" или 0x00 в зависимости от num lock'а). позиционный код из scan кода получается по специальной таблице (в гугле нашелся пример таблицы http://www.cyberdengi.com/FoundationsOfAssembler/Scan.html)