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

📄 keylist.cpp

📁 XOSL 多操作系统管理工具 源代码 多系统引导工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
 * Extended Operating System Loader (XOSL)
 * Copyright (c) 1999 by Geurt Vos
 *
 * This code is distributed under GNU General Public License (GPL)
 *
 * The full text of the license can be found in the GPL.TXT file,
 * or at http://www.gnu.org
 */

#include <key.h>
#include <string.h>

CKeyboard::CKeyboard()
{
	CtrlKey = false;
	AltKey = false;
}

CKeyboard::~CKeyboard()
{
}


void CKeyboard::GetKeyStatus(bool &Ctrl, bool &Alt)
{
	Ctrl = CtrlKey;
	Alt = AltKey;
}

bool CKeyboard::IsFuncKey(int KeyCode, bool &Shift, bool &Ctrl, bool &Alt)
{
	Shift = Alt = Ctrl = false;
	if (KeyCode >= KEY_F1 && KeyCode <= KEY_F10) {
		return true;
	}
	if (KeyCode >= KEY_SHIFT_F1 && KeyCode <= KEY_SHIFT_F10) {
		Shift = true;
		return true;
	}
	if (KeyCode >= KEY_ALT_F1 && KeyCode <= KEY_ALT_F10) {
		Alt = true;
		return true;
	}
	if (KeyCode >= KEY_CTRL_F1 && KeyCode <= KEY_CTRL_F10) {
		Ctrl = true;
		return true;
	}
	return false;
}

void CKeyboard::GetKeyName(int KeyCode, char *KeyName)
{
	int TempKey;

	TempKey = LastKey;
	LastKey = KeyCode;
	GetKeyName(KeyName);
	LastKey = TempKey;
}

void CKeyboard::GetKeyName(char *KeyName)
{
	unsigned short ScanCode = LastKey >> 8;
	unsigned short AsciiCode = LastKey & 0xff;
	int Index;

	CtrlKey = false;
	AltKey = false;
	/* scan the special keys list */
	for (Index = 0; Index < SPECIAL_KEY_COUNT; ++Index)
		if (SpecialKeyList[Index].ScanCode == (unsigned char)ScanCode) {
			if (SpecialKeyList[Index].NormalAscii == (unsigned char)AsciiCode) {
				strcpy(KeyName,SpecialKeyList[Index].KeyName);
				return;
			}
			else
				if (SpecialKeyList[Index].CtrlAscii == (unsigned char)AsciiCode) {
					strcpy(KeyName,"Ctrl-");
					strcat(KeyName,SpecialKeyList[Index].KeyName);
					CtrlKey = true;
					return;
				}
				else
					if (SpecialKeyList[Index].AltAscii == (unsigned char)AsciiCode) {
						strcpy(KeyName,"Alt-");
						strcat(KeyName,SpecialKeyList[Index].KeyName);
						AltKey = true;
						return;
					}
		}
	if (ScanCode >= DEFAULT_KEY_COUNT) {
		strcpy(KeyName,"Undefined");
		return;
	}
	if (KeyList[ScanCode].NormalAscii == (unsigned char)AsciiCode)
		strcpy(KeyName,KeyList[ScanCode].KeyName);
	else
		if (KeyList[ScanCode].CtrlAscii == (unsigned char)AsciiCode) {
			strcpy(KeyName,"Ctrl-");
			strcat(KeyName,KeyList[ScanCode].KeyName);
			CtrlKey = true;
		}
		else
			if (KeyList[ScanCode].AltAscii == (unsigned char)AsciiCode) {
				strcpy(KeyName,"Alt-");
				strcat(KeyName,KeyList[ScanCode].KeyName);
				AltKey = true;
			}
			else
				strcpy(KeyName,(const char *)&AsciiCode);
}

/*
 * list of special keys, which share scan codes
 * with 'default' keys. This list is scanned first.
 */
CKeyboard::TSpecialKeyListEntry CKeyboard::SpecialKeyList[SPECIAL_KEY_COUNT] = {
{0x54,0x00,-1,-1,"Shift-F1"}, // Shift is not supported by TKeyListEntry
{0x55,0x00,-1,-1,"Shift-F2"}, // though it should have supported it...
{0x56,0x00,-1,-1,"Shift-F3"},
{0x57,0x00,-1,-1,"Shift-F4"},
{0x58,0x00,-1,-1,"Shift-F5"},
{0x59,0x00,-1,-1,"Shift-F6"},
{0x5a,0x00,-1,-1,"Shift-F7"},
{0x5b,0x00,-1,-1,"Shift-F8"},
{0x5c,0x00,-1,-1,"Shift-F9"},
{0x5d,0x00,-1,-1,"Shift-F10"},
{0x5f,0x80,0x02,-1,"Sleep"} // Windows 98 Power Kbd Sleep shared with Ctrl-F2
};
		typedef struct {
			char ScanCode;
			char NormalAscii;
			char CtrlAscii;
			char AltAscii;
			const char *KeyName;
		} TSpecialKeyListEntry;


// Use scan code as index in KeyList
CKeyboard::TKeyListEntry CKeyboard::KeyList[DEFAULT_KEY_COUNT] = {
{-1,0x00,-1,"Break"}, // Break (Ctrl only)
{0x1b,-1,-1,"Escape"}, // Escape
{-1,-1,-1,NULL}, // 1 !
{-1,0x00,-1,"2"}, // 2 @
{-1,-1,-1,NULL}, // 3 #
{-1,-1,-1,NULL}, // 4 $
{-1,-1,-1,NULL}, // 5 %
{-1,0x1e,-1,"6"}, // 6 ^
{-1,-1,-1,NULL}, // 7 &
{-1,-1,-1,NULL}, // 8 *
{-1,-1,-1,NULL}, // 9 (
{-1,-1,-1,NULL}, // 0 )
{-1,0x1f,-1,"-"}, // - _
{-1,-1,-1,NULL}, // = +
{0x08,0x7f,-1,"Backspace"}, // backspace
{0x09,-1,-1,"Tab"}, // Tab
{-1,0x11,0x00,"Q"}, // q Q
{-1,0x17,0,"W"}, // w W
{-1,0x05,0,"E"}, // e E
{-1,0x12,0,"R"}, // r R
{-1,0x14,0,"T"}, // t T
{-1,0x19,0,"Y"}, // y Y
{-1,0x15,0,"U"}, // u U
{-1,0x09,0,"I"}, // i I
{-1,0x0f,0,"O"}, // o O
{-1,0x10,0,"P"}, // p P
{-1,0x1b,-1,"["}, // [ {
{-1,0x1d,-1,"]"}, // ] }
{0x0d,0x0a,-1,"Enter"}, // Enter
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,0x01,0,"A"}, // a A
{-1,0x13,0,"S"}, // s S
{-1,0x04,0,"D"}, // d D
{-1,0x06,0,"F"}, // f F
{-1,0x07,0,"G"}, // g G
{-1,0x08,0,"H"}, // h H
{-1,0x0a,0,"J"}, // j J
{-1,0x0b,0,"K"}, // k K
{-1,0x0c,0,"L"}, // l L
{-1,-1,-1,NULL}, // ; :
{-1,-1,-1,NULL}, // ' "
{-1,-1,-1,NULL}, // ` ~
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,0x1c,-1,"\\"}, // \ |
{-1,0x1a,0,"Z"}, // z Z
{-1,0x18,0,"X"}, // x X
{-1,0x03,0,"C"}, // c C
{-1,0x16,0,"V"}, // v V
{-1,0x02,0,"B"}, // b B
{-1,0x0e,0,"N"}, // n N
{-1,0x0d,0,"M"}, // m M
{-1,-1,-1,NULL}, // , <
{-1,-1,-1,NULL}, // . >
{-1,-1,-1,NULL}, // .
{-1,-1,-1,"Undefined"}, // Undefined key
{0x2a,-1,-1,"Keypad *"}, // Keypad *
{-1,-1,-1,"Undefined"}, // Undefined key
{0x20,-1,-1,"Space"}, // space
{-1,-1,-1,"Undefined"}, // Undefined key
{0x00,-1,-1,"F1"}, // F1
{0x00,-1,-1,"F2"}, // F2
{0x00,-1,-1,"F3"}, // F3
{0x00,-1,-1,"F4"}, // F4
{0x00,-1,-1,"F5"}, // F5
{0x00,-1,-1,"F6"}, // F6
{0x00,-1,-1,"F7"}, // F7
{0x00,-1,-1,"F8"}, // F8
{0x00,-1,-1,"F9"}, // F9
{0x00,-1,-1,"F10"}, // F10
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{0x00,-1,-1,"Home"}, // Home
{0x00,-1,-1,"Up"}, // Cursor Up
{0x00,-1,-1,"Page Up"}, // Page Up
{0x2d,-1,-1,"Keypad -"}, // Keypad -
{0x00,-1,-1,"Left"}, // Cursor left
{-1,-1,-1,NULL}, // Keypad 5
{0x00,-1,-1,"Right"}, // Cursor right
{0x2b,-1,-1,"Keypad +"}, // Keypard +
{0x00,-1,-1,"End"}, // End
{0x00,-1,-1,"Down"}, // Cursor down
{0x00,-1,-1,"Page Down"}, // Page Down
{0x00,-1,-1,"Insert"}, // Insert
{0x00,-1,-1,"Delete"}, // Delete
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,-1,-1,"Undefined"}, // Undefined key
{-1,0x00,-1,"F1"}, // F1 (Ctrl only)
{-1,0x00,-1,"F2"}, // F2 (Ctrl only)
//{0x80,0x02,-1,"Sleep"}, // Windows 98 Power Kbd Sleep button also on 0x5f
{-1,0x00,-1,"F3"}, // F3 (Ctrl only)
{-1,0x00,-1,"F4"}, // F4 (Ctrl only)
{-1,0x00,-1,"F5"}, // F5 (Ctrl only)
{-1,0x00,-1,"F6"}, // F6 (Ctrl only)
{-1,0x00,-1,"F7"}, // F7 (Ctrl only)
{-1,0x00,-1,"F8"}, // F8 (Ctrl only)
{-1,0x00,-1,"F9"}, // F9 (Ctrl only)
{-1,0x00,-1,"F10"}, // F10 (Ctrl only)
{-1,-1,0x00,"F1"}, // F1 (Alt only)
{-1,-1,0x00,"F2"}, // F2 (Alt only)
{-1,-1,0x00,"F3"}, // F3 (Alt only)
{-1,-1,0x00,"F4"}, // F4 (Alt only)
{-1,-1,0x00,"F5"}, // F5 (Alt only)
{-1,-1,0x00,"F6"}, // F6 (Alt only)
{-1,-1,0x00,"F7"}, // F7 (Alt only)
{-1,-1,0x00,"F8"}, // F8 (Alt only)
{-1,-1,0x00,"F9"}, // F9 (Alt only)
{-1,-1,0x00,"F10"}, // F10 (Alt only)
{-1,0x00,-1,"SysRq"}, // SysRq (Ctrl only)
{-1,0x00,-1,"Left"}, // Left (Ctrl only)
{-1,0x00,-1,"Right"}, // Ctrl (Ctrl only)
{-1,0x00,-1,"End"}, // End (Ctrl only)
{-1,0x00,-1,"Page Down"}, // Page Down (Ctrl only)
{-1,0x00,-1,"Home"}, // Home (Ctrl only)
{-1,-1,0x00,"1"}, // 1 (Alt only)
{-1,-1,0x00,"2"}, // 2 (Alt only)
{-1,-1,0x00,"3"}, // 3 (Alt only)
{-1,-1,0x00,"4"}, // 4 (Alt only)
{-1,-1,0x00,"5"}, // 5 (Alt only)
{-1,-1,0x00,"6"}, // 6 (Alt only)
{-1,-1,0x00,"7"}, // 7 (Alt only)
{-1,-1,0x00,"8"}, // 8 (Alt only)
{-1,-1,0x00,"9"}, // 9 (Alt only)
{-1,-1,0x00,"0"}, // 0 (Alt only)
{-1,-1,0x00,"-"}, // - (Alt only)
{-1,-1,0x00,"="}, // = (Alt only)
{-1,0x00,-1,"Page Up"} // Page Up (Ctrl only)
};

class CKeyDesc {

⌨️ 快捷键说明

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