⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key_scan.txt

📁 运行后按着几个按键
💻 TXT
字号:
#include"dos.h"
char key_state[128], key_pressed[128];
/*其中key_state[128]用来表示键的当前状态,key_pressed[128]里保存的值表示哪些键被按下,值1表示按下,0表示放开。
*/
void interrupt far  (*OldInt9Handler) ();
/*保存好原来的键盘中断程序地址,以便在程序运行结束后恢复它*/
/*新的键盘中断程序*/
void far interrupt NewInt9 (void)
{
   char ScanCode,temp;

   ScanCode = inportb (0x60);
   temp = inportb (0x61);
   outportb (0x61, temp | 0x80);
   outportb (0x61, temp & 0x7f);
   if (ScanCode & 0x80) {
       ScanCode &= 0x7f;
       key_state[ScanCode] = 0;
   }
   else {
       key_state[ScanCode] = 1;
       key_pressed[ScanCode] = 1;
   }
   outportb (0x20, 0x20);
}
/*安装新的键盘中断程序的函数*/
void InstallKeyboard (void)
{
   int i;

   for (i = 0; i < 128; i++)
      key_state[i] = key_pressed[i] = 0;
   OldInt9Handler = getvect (9);
   setvect (9, NewInt9);
}
/*恢复旧的键盘中断程序的函数*/
void ShutDownKeyboard (void)
{
   setvect (9, OldInt9Handler);
}
/*读取按键状态的函数*/
int GetKey (int ScanCode)
{
   int res;

   res = key_state[ScanCode] | key_pressed[ScanCode];
   key_pressed[ScanCode] = 0;
   return res;
}

main ()
{
   int i,press;

   InstallKeyboard ();
   while (GetKey (1)==0){        /*按ESC退出*/
      press = 0;
      for (i = 0; i < 128; i++)
         if (GetKey (i)) {
            press = 1;
            printf ("%4d",i);
         }
      if (press) 
         printf ("\n");
      else
         printf ("\nNokey!\n");
   }
   ShutDownKeyboard ();
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -