📄 mckeyboard.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 + -