Каковы значения ASCII клавиш со стрелками? (/вниз/левый/исправлять)
Для этих клавиш как таковых нет реальных кодов ascii, вам нужно будет проверить коды сканирования для этих клавиш, известные как коды клавиш Make и Break согласно helppc ] информацию. Причина, по которой коды звучат как «ascii», заключается в том, что коды клавиш обрабатываются старым прерыванием BIOS 0x16 и прерыванием клавиатуры 0x9.
Normal Mode Num lock on Make Break Make Break Down arrow E0 50 E0 D0 E0 2A E0 50 E0 D0 E0 AA Left arrow E0 4B E0 CB E0 2A E0 4B E0 CB E0 AA Right arrow E0 4D E0 CD E0 2A E0 4D E0 CD E0 AA Up arrow E0 48 E0 C8 E0 2A E0 48 E0 C8 E0 AA
Следовательно, глядя на коды, следующие за E0 для кода клавиши Make, такие как 0x50, 0x4B, 0x4D, 0x48 соответственно, возникает путаница, если смотреть на коды клавиш и рассматривать их как 'ascii' ... ответ: не , поскольку платформа меняется, ОС меняется, в Windows он будет иметь код виртуальной клавиши, соответствующий этим клавишам, не обязательно такой же, как коды BIOS, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT .. это можно найти в файле заголовка C ++ windows.h, как я помню, в папке include SDK.
Не полагайтесь на коды клавиш, чтобы иметь те же «идентичные коды ascii», показанные здесь, поскольку операционная система перепрограммирует весь код BIOS в соответствии с тем, что ОС сочтет нужным, естественно, этого следовало ожидать, потому что, поскольку код BIOS 16-битный и ОС (в настоящее время 32-битный защищенный режим), конечно, эти коды из BIOS больше не будут действительны.
Следовательно, исходное прерывание клавиатуры 0x9 и прерывание BIOS 0x16 будут стерты из памяти после того, как BIOS загрузит его, и когда ОС в защищенном режиме начнет загрузку, она перезапишет эту область памяти и заменит ее собственным 32-битным защищенным режимом. обработчики для работы с этими кодами сканирования клавиатуры.
Вот пример кода из старых дней программирования DOS с использованием Borland C v3:
#include <bios.h> int getKey(void){ int key, lo, hi; key = bioskey(0); lo = key & 0x00FF; hi = (key & 0xFF00) >> 8; return (lo == 0) ? hi + 256 : lo; }
На самом деле эта процедура вернула коды вверх, вниз: 328 и 336 соответственно (у меня нет кода для левой и правильно, это в моей старой кулинарной книге!) Фактический скан-код находится в переменной lo
. Ключи, отличные от AZ, 0-9, имели код сканирования 0 с помощью процедуры bioskey
.... добавляется причина 256, потому что переменная lo
имеет код 0 и переменная hi
будет иметь скан-код и добавить к нему 256, чтобы не путать с кодами 'ascii' ...
Вкратце:
стрелка влево: 37
стрелка вверх: 38
стрелка вправо: 39
стрелка вниз: 40
На самом деле ответ на этот вопрос зависит от того, какую операционную систему и язык программирования вы используете. Как такового "кода ASCII" не существует. Операционная система обнаруживает, что вы нажимаете клавишу со стрелкой, и запускает событие, которое программы могут зафиксировать. Например, на современных компьютерах с Windows вы получите событие WM_KEYUP или WM_KEYDOWN. Обычно он передает 16-битное значение, чтобы определить, какая клавиша была нажата.
Если вы программируете в OpenGL, используйте GLUT. Следующая страница должна помочь: http://www.lighthouse3d.com/opengl/glut/index.php?5
GLUT_KEY_LEFT Left function key
GLUT_KEY_RIGHT Right function key
GLUT_KEY_UP Up function key
GLUT_KEY_DOWN Down function key
void processSpecialKeys(int key, int x, int y) {
switch(key) {
case GLUT_KEY_F1 :
red = 1.0;
green = 0.0;
blue = 0.0; break;
case GLUT_KEY_F2 :
red = 0.0;
green = 1.0;
blue = 0.0; break;
case GLUT_KEY_F3 :
red = 0.0;
green = 0.0;
blue = 1.0; break;
}
}