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

📄 doskeys.c

📁 这是一些c++例程
💻 C
字号:
#include <dos.h>
#include <conio.h> 
#include <stdio.h> 

#define ESC    1 
#define UP     72 
#define _UP    200 
#define DOWN   80 
#define _DOWN  208 
#define LEFT   75 
#define _LEFT  203 
#define RIGHT  77 
#define _RIGHT 205 

#define NUM_KEYS 4 

#define INDEX_UP    0 
#define INDEX_DOWN  1 
#define INDEX_LEFT  2 
#define INDEX_RIGHT 3

char *key_table_name[NUM_KEYS] = {"UP","DOWN","LEFT","RIGHT" };
int key_scan_code; 		/* 键盘扫描码 */
int key_table[NUM_KEYS];	/* 按键表 */


/* 自定义中断处理函数 */
void far interrupt newhandler()
{
	int status;
	key_scan_code = inp(0x60); 	/* 读键盘扫描码 */
	status = inp(0x61); 		/* 读键盘状态 */
	outp(0x61,status & 0x80); 	/* 置位7并写 */
	outp(0x61,status); 		/* 再写位7 */
	outp(0x20,0x20); 		/* 复位PIC */

	/* 记录光标键,设置key_table[]中的状态1为按下键,0为松开键 */
	switch(key_scan_code)
	{
	case UP:    key_table[INDEX_UP]    = 1;   break;
	case _UP:   key_table[INDEX_UP]    = 0;   break;
	case DOWN:  key_table[INDEX_DOWN]  = 1;   break;
	case _DOWN: key_table[INDEX_DOWN]  = 0;   break;
	case LEFT:  key_table[INDEX_LEFT]  = 1;   break;
	case _LEFT: key_table[INDEX_LEFT]  = 0;   break;
	case RIGHT: key_table[INDEX_RIGHT] = 1;   break;
	case _RIGHT:key_table[INDEX_RIGHT] = 0;   break;
	}
}

/* 初始化键盘表 */
void init_key_table(void) 
{ 
	register i; 
	for(i=0;i<NUM_KEYS;i++) 
		key_table[i]=0; 
} 

void main(void) 
{ 
	int i;
	void interrupt (* oldhandler)(void); /* 定义一个中断类型的指针,用于保存旧的中断向量*/

	clrscr();
	
	/* 开始自定义中断处理 */
	oldhandler = getvect(9);
	setvect(9, newhandler);

	printf("Play with the arrow keys, press ESC to quit.\n"); 
	while(key_scan_code != ESC)
	{
		init_key_table();  
		gotoxy(5,5); 
		printf("Key scancode: %d", key_scan_code); 
		gotoxy(5,10); 
		printf("Key name:"); 
		for(i=0;i<NUM_KEYS;i++)
		{
			if(key_table[i] != 0)
				printf("%s",key_table_name[i]);
		}
	}
	
	setvect(9, oldhandler);
}

⌨️ 快捷键说明

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