Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2012, 22:56   #1
EddieG
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 42
По умолчанию Вектор прерывания

Есть комбинация клавиш Ctrl+Shift+F8. Нужно при нажатии этой комбинации блокировать клавишу у. При повторном нажатии - отменять этот режим.
Вот программа. Подскажите пожалуйста, что нужно добавить?

Код:
#include <dos.h>
#include <conio.h>
#include <stdio.h>

int main()
{
  clrscr();
  int i = 0;
  int c = 0;
  unsigned char mask = 1;
  unsigned char SCAN, ASCII, flag_1, flag_2;
  do{
      asm {
      mov AH, 0;
	  int 0x16;
	  mov SCAN, AH;
	  mov ASCII, AL;
	  mov AH, 0x12;
	  int 0x16;
	  mov flag_1, AH;
	  mov flag_2, AL;
	  }
clrscr();


for (i=0; i<8; i++) {
if  ((mask & flag_1) == mask)
{

switch(i)
{
    case 0: c = 1; printf ("Left CTRL is pressed\n"); break;
    case 1: printf ("Left ALT is pressed\n"); break;
    case 2: c = 1; printf ("Right CTRL is pressed\n"); break;
    case 3: printf ("Right ALT is pressed\n"); break;
    case 4: printf ("SCROL-LOCK is pressed\n"); break;
    case 5: printf ("NUM-LOCK is pressed\n"); break;
    case 6: printf ("CAPS-LOCK is pressed\n"); break;
    case 7: printf ("SysRq is pressed\n"); break;
}
}
mask = mask << 1;
}
mask = 1;

for (i=0; i<8; i++) {
if  ((mask & flag_2) == mask)
{

switch(i)
{
    case 0: printf ("Right SHIFT is pressed\n"); break;
    case 1: printf ("Left SHIFT is pressed\n"); break;
    case 2: printf ("CTRL is pressed\n"); break;
    case 3: printf ("ALT is pressed\n"); break;
    case 4: printf ("SCROL-LOCK is on\n"); break;
    case 5: printf ("NUM-LOCK is on\n"); break;
    case 6: printf ("CAPS-LOCK is pressed\n"); break;
    case 7: printf ("INSERT is on\n"); break;
}
}
mask = mask << 1;
}

printf("Scan code %d\n", SCAN);
if ( c != 1 )
printf("ASCII code %c\n", ASCII);


c = 0;
mask = 1;

}while(SCAN != 1);

printf ("\n");

getch();
return 0;
}
Допущение несогласованных и логически несовместимых представлений - часть человеческого мышления.
EddieG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прерывания lilek Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 14.12.2010 20:44
DOS Клавиатура, Вектор прерывания BOBAH13 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 12 23.12.2009 01:02
Прерывания Kn793 Общие вопросы Delphi 3 10.01.2009 18:43
прерывания sergei64_89 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.04.2008 13:37