Каковы значения ASCII вниз левого права?

Каковы значения ASCII клавиш со стрелками? (/вниз/левый/исправлять)

40
задан derobert 15 March 2011 в 16:49
поделиться

4 ответа

Для этих клавиш как таковых нет реальных кодов 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' ...

24
ответ дан 27 November 2019 в 01:12
поделиться

Вкратце:

стрелка влево: 37
стрелка вверх: 38
стрелка вправо: 39
стрелка вниз: 40

56
ответ дан 27 November 2019 в 01:12
поделиться

На самом деле ответ на этот вопрос зависит от того, какую операционную систему и язык программирования вы используете. Как такового "кода ASCII" не существует. Операционная система обнаруживает, что вы нажимаете клавишу со стрелкой, и запускает событие, которое программы могут зафиксировать. Например, на современных компьютерах с Windows вы получите событие WM_KEYUP или WM_KEYDOWN. Обычно он передает 16-битное значение, чтобы определить, какая клавиша была нажата.

11
ответ дан 27 November 2019 в 01:12
поделиться

Если вы программируете в 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;
}
}
6
ответ дан 27 November 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: