Как можно сделать на assemblere так что-бы при нажатии клавиши на клавиатуры выполнялось одно, а когды я отпускаю клавишу выполнялось другое? Может есть функция которая провиряет если клавиша нажата или нет?
Спасибо.
Mой email:dsllsd2000@yahoo.co.in
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Legion_Roka, Вы писали:
L_R>>Как можно сделать на assemblere так что-бы при нажатии клавиши на клавиатуры выполнялось одно, а когды я отпускаю клавишу выполнялось другое? Может есть функция которая провиряет если клавиша нажата или нет?
L_R>>Спасибо.
L_R>>Mой email:dsllsd2000@yahoo.co.in
А>Читаешь из порта клавиатуры 0x60. При чтении из него можно получить скан-код последней нажатой клавиши. По этому коду можно определять моменты нажатия и отпускения любой нажатой клавиши, включая такие клавиши, как SHIFT, CTRL, ALT. Скан-код отпускания клавиши равен скан-коду нажатия плюс 0x80.
И ещё :
//Таблица скан-кодов клавиатуры
char scancodes[] = {
0,
0, //ESC
'1','2', '3', '4', '5', '6', '7', '8', '9', '0',
'-', '=',
8, //BACKSPACE
'\t',//TAB
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']',
'\n', //ENTER
0, //CTRL
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`',
0, //LEFT SHIFT,
'\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/',
0, //RIGHT SHIFT,
'*', //NUMPAD
0, //ALT
' ', //SPACE
0, //CAPSLOCK
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //F1 - F10
0, //NUMLOCK
0, //SCROLLOCK
0, //HOME
0,
0, //PAGE UP
'-', //NUMPAD
0, 0,
0, //(r)
'+', //NUMPAD
0, //END
0,
0, //PAGE DOWN
0, //INS
0, //DEL
0, //SYS RQ
0,
0, 0, //F11-F12
0,
0, 0, 0, //F13-F15
0, 0, 0, 0, 0, 0, 0, 0, 0, //F16-F24
0, 0, 0, 0, 0, 0, 0, 0
};
char scancodes_shifted[] = {
0,
0, //ESC
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
'_', '+',
8, //BACKSPACE
'\t',//TAB
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}',
'\n', //ENTER
0, //CTRL
'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~',
0, //LEFT SHIFT,
'|', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?',
0, //RIGHT SHIFT,
'*', //NUMPAD
0, //ALT
' ', //SPACE
0, //CAPSLOCK
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //F1 - F10
0, //NUMLOCK
0, //SCROLLOCK
0, //HOME
0,
0, //PAGE UP
'-', //NUMPAD
0, 0,
0, //(r)
'+', //NUMPAD
0, //END
0,
0, //PAGE DOWN
0, //INS
0, //DEL
0, //SYS RQ
0,
0, 0, //F11-F12
0,
0, 0, 0, //F13-F15
0, 0, 0, 0, 0, 0, 0, 0, 0, //F16-F24
0, 0, 0, 0, 0, 0, 0, 0
};