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

📄 mckeyboard.cpp

📁 keyboard driver example
💻 CPP
字号:
#include "mckeyboard.h"MCKeyboard::MCKeyboard() {	FunctionKeyStatus=NONE;	fd=get_console_fd(NULL);	GetKBMode(&OldKBMode);	tcgetattr(fd,&OldTermios);	sprintf(Version,"MCLIB0.15");}MCKeyboard::~MCKeyboard() {	SetKBMode(OldKBMode);	tcsetattr(fd,TCSANOW,&OldTermios);	close(fd);}char *MCKeyboard::GetVersion() {	return(Version+5);}int MCKeyboard::GetHandle() {	return fd;}bool MCKeyboard::Open(int min,int time) {	struct termios NewTermios;	if (tcgetattr(fd,&NewTermios))		return false;	NewTermios.c_lflag &= ~ (ICANON|ECHO|ISIG);	NewTermios.c_iflag = 0;	NewTermios.c_cc[VMIN]=min;	NewTermios.c_cc[VTIME]=time;	if (tcsetattr(fd,TCSAFLUSH,&NewTermios))		return false;	if (ioctl(fd,KDSKBMODE,K_RAW))		return false;	return true;}ssize_t MCKeyboard::Read(char *buf,size_t size) {	ssize_t result;	result=read(fd,buf,size);	return result;}unsigned short MCKeyboard::GetKeyDown(unsigned char *Status) {	unsigned short key;	bool down=false;	while (!down) {		key=GetKey();		switch (key) {			case 0://Timeout				down=true;				break;			case 0xffff://Error				down=true;				break;			case EXT_SHIFT_UP:			case EXT_SHIFT_DOWN:				break;			case L_CTRL_DOWN:			case R_CTRL_DOWN:				SetCtrlDown();				break;			case L_ALT_DOWN:			case R_ALT_DOWN:				SetAltDown();				break;			case L_SHIFT_DOWN:			case R_SHIFT_DOWN:				SetShiftDown();				break;			case L_CTRL_UP:			case R_CTRL_UP:				SetCtrlUp();				break;			case L_ALT_UP:			case R_ALT_UP:				SetAltUp();				break;			case L_SHIFT_UP:			case R_SHIFT_UP:				SetShiftUp();				break;			default:				if (IsDown(key)) {					(*Status)=GetFKeyStatus();					down=true;				}				break;		}	}	return key;}unsigned short MCKeyboard::GetKey() {	unsigned char buf;	unsigned short key;	ssize_t result;	key=0;	result=Read((char *)&buf,1);	if (result<0)		return 0xffff;	else if (result==0)		return 0;	if (buf==EXT) {		key=buf<<8;		if (Read((char *)&buf,1)<0)			return 0xffff;	}	key=key+buf;	return key;}bool MCKeyboard::IsUp(unsigned short scancode) {	unsigned short ret;	if ((scancode&(0x0000|ISUP))==ISUP) {		return true;	} else {		return false;	}}bool MCKeyboard::IsDown(unsigned short scancode) {	return (!IsUp(scancode));}unsigned char MCKeyboard::GetFKeyStatus() {	return (FunctionKeyStatus);}void MCKeyboard::SetShiftDown() {	FunctionKeyStatus=FunctionKeyStatus|SHIFT;}void MCKeyboard::SetShiftUp() {	FunctionKeyStatus=FunctionKeyStatus&(~SHIFT);}void MCKeyboard::SetAltDown() {	FunctionKeyStatus=FunctionKeyStatus|ALT;}void MCKeyboard::SetAltUp() {	FunctionKeyStatus=FunctionKeyStatus&(~ALT);}void MCKeyboard::SetCtrlDown() {	FunctionKeyStatus=FunctionKeyStatus|CTRL;}void MCKeyboard::SetCtrlUp() {	FunctionKeyStatus=FunctionKeyStatus&(~CTRL);}void MCKeyboard::SetFnDown() {	FunctionKeyStatus=FunctionKeyStatus|Fn;}void MCKeyboard::SetFnUp() {	FunctionKeyStatus=FunctionKeyStatus&(~Fn);}bool MCKeyboard::GetKBMode(int *mode) {	if (ioctl(fd,KDGKBMODE,mode))		return false;	else		return true;}bool MCKeyboard::SetKBMode(int mode) {	if (ioctl(fd,KDSKBMODE,mode))		return false;	else		return true;}

⌨️ 快捷键说明

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