Keycodes to Keyname

BlitzMax Forums/BlitzMax Beginners Area/Keycodes to Keyname

Hi,

for my key settings I use a function which detects the keycode
of the pressed key.
Then I want to display the name of the key (KEY_DELETE, KEY_UP..).
Is there a way to get the name of the key by the keycode?
For code 48-90 I could use "KEY_"+Chr(keycode), but for the other I would
have to create a table manually. Not really a problem, but perhaps there is a workaround?

here is what i used in Bullet Candy, i honestly can't remember if this was in the code archives or not.

Cheers
Charlie


Function getKeyCodeChar:String(inNum:Int)

If inNum=8  Then Return "Backspace"
If inNum=9  Then Return "Tab"
If inNum=12 Then Return "Clear"
If inNum=13 Then Return "Return"
If inNum=19 Then Return "Pause"
If inNum=20 Then Return "Caps Lock"
If inNum=32 Then Return "Space"
If inNum=33 Then Return "Page Up"
If inNum=34 Then Return "Page Down"
If inNum=35 Then Return "End"
If inNum=36 Then Return "Home"
If inNum=37 Then Return "Left"
If inNum=38 Then Return "Up"
If inNum=39 Then Return "Right"
If inNum=40 Then Return "Down"
If inNum=41 Then Return "Select"
If inNum=42 Then Return "'print"
If inNum=43 Then Return "Execute"
If inNum=44 Then Return "Screen"
If inNum=45 Then Return "Insert"
If inNum=46 Then Return "Delete"
If inNum=47 Then Return "Help"
If inNum=48 Then Return "0"
If inNum=49 Then Return "1"
If inNum=50 Then Return "2"
If inNum=51 Then Return "3"
If inNum=52 Then Return "4"
If inNum=53 Then Return "5"
If inNum=54 Then Return "6"
If inNum=55 Then Return "7"
If inNum=56 Then Return "8"
If inNum=57 Then Return "9"
If inNum=65 Then Return "A"
If inNum=66 Then Return "B"
If inNum=67 Then Return "C"
If inNum=68 Then Return "D"
If inNum=69 Then Return "E"
If inNum=70 Then Return "F"
If inNum=71 Then Return "G"
If inNum=72 Then Return "H"
If inNum=73 Then Return "I"
If inNum=74 Then Return "J"
If inNum=75 Then Return "K"
If inNum=76 Then Return "L"
If inNum=77 Then Return "M"
If inNum=78 Then Return "N"
If inNum=79 Then Return "O"
If inNum=80 Then Return "P"
If inNum=81 Then Return "Q"
If inNum=82 Then Return "R"
If inNum=83 Then Return "S"
If inNum=84 Then Return "T"
If inNum=85 Then Return "U"
If inNum=86 Then Return "V"
If inNum=87 Then Return "W"
If inNum=88 Then Return "X"
If inNum=89 Then Return "Y"
If inNum=90 Then Return "Z"
If inNum=96 Then Return "Numpad 0"
If inNum=97 Then Return "Numpad 1"
If inNum=98 Then Return "Numpad 2"
If inNum=99 Then Return "Numpad 3"
If inNum=100 Then Return "Numpad 4"
If inNum=101 Then Return "Numpad 5"
If inNum=102 Then Return "Numpad 6"
If inNum=103 Then Return "Numpad 7"
If inNum=104 Then Return "Numpad 8"
If inNum=105 Then Return "Numpad 9"
If inNum=106 Then Return "Numpad *"
If inNum=107 Then Return "Numpad +"
If inNum=109 Then Return "Numpad -"
If inNum=110 Then Return "Numpad ."
If inNum=111 Then Return "Numpad /"
If inNum=112 Then Return "F1"
If inNum=113 Then Return "F2"
If inNum=114 Then Return "F3"
If inNum=115 Then Return "F4"
If inNum=116 Then Return "F5"
If inNum=117 Then Return "F6"
If inNum=118 Then Return "F7"
If inNum=119 Then Return "F8"
If inNum=120 Then Return "F9"
If inNum=121 Then Return "F10"
If inNum=122 Then Return "F11"
If inNum=123 Then Return "F12"
If inNum=144 Then Return "Num Lock"
If inNum=145 Then Return "Scroll Lock"
If inNum=160 Then Return "Shift (Left)"
If inNum=161 Then Return "Shift (Right)"
If inNum=162 Then Return "Control (Left)"
If inNum=163 Then Return "Control (Right)"
If inNum=164 Then Return "Alt key (Left)"
If inNum=165 Then Return "Alt key (Right)"
If inNum=192 Then Return "Tilde"
If inNum=107 Then Return "Minus"
If inNum=109 Then Return "Equals"
If inNum=219 Then Return "Bracket (Open)"
If inNum=221 Then Return "Bracket (Close)"
If inNum=226 Then Return "Backslash"
If inNum=186 Then Return "Semi-colon"
If inNum=222 Then Return "Quote"
If inNum=188 Then Return "Comma"
If inNum=190 Then Return "Period"		
If inNum=191 Then Return "Slash"

End Function


Looks like there are some missing from that list, Krankie. I don't see the cursor keys, for example (200,203,205,208)

[edit] Never mind - found them now. Didn't realise they'd changed.

you're still right i think, there are probably some missing, and i guess it wouldn't work with some foreign keyboards either?

Cheers
Charlie

Does Max even work with foreign keyboards?

This is from my duct.input module:
Function KeyCodeToString:String(keycode:Int)
	
	Select keycode
		
		'Function keys
		Case KEY_F1 Return "f1"
		Case KEY_F2 Return "f2"
		Case KEY_F3 Return "f3"
		Case KEY_F4 Return "f4"
		Case KEY_F5 Return "f5"
		Case KEY_F6 Return "f6"
		Case KEY_F7 Return "f7"
		Case KEY_F8 Return "f8"
		Case KEY_F9 Return "f9"
		Case KEY_F10 Return "f10"
		Case KEY_F11 Return "f11"
		Case KEY_F12 Return "f12"
		
		'Alphabet keys
		Case KEY_Q Return "q"
		Case KEY_W Return "w"
		Case KEY_E Return "e"
		Case KEY_R Return "r"
		Case KEY_T Return "t"
		Case KEY_Y Return "y"
		Case KEY_U Return "u"
		Case KEY_I Return "i"
		Case KEY_O Return "o"
		Case KEY_P Return "p"
		Case KEY_A Return "a"
		Case KEY_S Return "s"
		Case KEY_D Return "d"
		Case KEY_F Return "f"
		Case KEY_G Return "g"
		Case KEY_H Return "h"
		Case KEY_J Return "j"
		Case KEY_K Return "k"
		Case KEY_L Return "l"
		Case KEY_Z Return "z"
		Case KEY_X Return "x"
		Case KEY_C Return "c"
		Case KEY_V Return "v"
		Case KEY_B Return "b"
		Case KEY_N Return "n"
		Case KEY_M Return "m"
		
		'Numbers and non-alphabet keys
		Case KEY_TILDE Return "tilde"
		Case KEY_1 Return "one"
		Case KEY_2 Return "two"
		Case KEY_3 Return "three"
		Case KEY_4 Return "four"
		Case KEY_5 Return "five"
		Case KEY_6 Return "six"
		Case KEY_7 Return "seven"
		Case KEY_8 Return "eight"
		Case KEY_9 Return "nine"
		Case KEY_0 Return "zero"
		Case KEY_MINUS Return "minus"
		Case KEY_EQUALS Return "equals"
		Case KEY_OPENBRACKET Return "["
		Case KEY_CLOSEBRACKET Return "]"
		Case KEY_SEMICOLON Return ";"
		Case KEY_QUOTES Return "~q"
		Case KEY_PERIOD Return "period"
		Case KEY_COMMA Return "comma"
		Case KEY_BACKSLASH Return "backslash"
		Case KEY_SLASH Return "forwardslash"
		Case KEY_SPACE Return "space"
		Case KEY_PRINT Return "printscrn"
		Case KEY_HOME Return "home"
		Case KEY_END Return "end"
		Case KEY_PAGEUP Return "pgup"
		Case KEY_PAGEDOWN Return "pgdn"
		Case KEY_INSERT Return "insert"
		Case KEY_DELETE Return "delete"
		Case 19 Return "pause"
		Case 145 Return "scrllock"
		
		'Num keys
		Case 144 Return "numlock"
		Case KEY_NUM0 Return "num0"
		Case KEY_NUM1 Return "num1"
		Case KEY_NUM2 Return "num2"
		Case KEY_NUM3 Return "num3"
		Case KEY_NUM4 Return "num4"
		Case KEY_NUM5 Return "num5"
		Case KEY_NUM6 Return "num6"
		Case KEY_NUM7 Return "num7"
		Case KEY_NUM8 Return "num8"
		Case KEY_NUM9 Return "num9"
		Case KEY_NUMMULTIPLY Return "num*"
		Case KEY_NUMDIVIDE Return "num/"
		Case KEY_NUMADD Return "num+"
		Case KEY_NUMSUBTRACT Return "num-"
		Case KEY_NUMDECIMAL Return "num."
		'Case "numreturn" Return key_num
		
		'Arrow keys
		Case KEY_UP Return "up"
		Case KEY_DOWN Return "down"
		Case KEY_LEFT Return "left"
		Case KEY_RIGHT Return "right"
		
		'Modifiers
		Case KEY_BACKSPACE Return "backspace"
		Case KEY_TAB Return "tab"
		Case 20 Return "capslock"
		Case MODIFIER_CONTROL Return "ctrl"
		Case KEY_LCONTROL Return "lctrl"
		Case KEY_RCONTROL Return "rctrl"
		Case MODIFIER_SHIFT Return "shift"
		Case KEY_LSHIFT Return "lshift"
		Case KEY_RSHIFT Return "rshift"
		Case MODIFIER_ALT Return "alt"
		Case KEY_LALT Return "lalt"
		Case KEY_RALT Return "ralt"
		
		'Other
		Case KEY_ESCAPE Return "escape"
		
	End Select
	
	Return Null
	
End Function


Or if you prefer a one-liner:
Global keynames$[]=["", "", "", "", "", "", "", "", "Backspace", "Tab", "", "", "Clear", "Enter", "Return", "", "", "", "", "Pause", "Caps Lock", "", "", "", "", "", "", "Escape", "", "", "", "", "Space", "Page Up", "Page Down", "End", "Home", "Cursor (Left)", "Cursor (Up)", "Cursor (Right)", "Cursor (Down)", "Select", "Print", "Execute", "Screen", "Insert", "Delete", "Help", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "", "", "", "", "", "", "", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Sys key (Left)", "Sys key (Right)", "", "", "", "Numpad 0", "Numpad 1", "Numpad 2", "Numpad 3", "Numpad 4", "Numpad 5", "Numpad 6", "Numpad 7", "Numpad 8", "Numpad 9", "Numpad *", "Numpad +", "", "Numpad -", "Numpad .", "Numpad /", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Num Lock", "Scroll Lock", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Shift (Left)", "Shift (Right)", "Control (Left)", "Control (Right)", "Alt key (Left)", "Alt key (Right)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Semi-colon", "Equals", "Comma", "Minus", "Period", "Slash", "Tilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Bracket (Open)", "", "Bracket (Close)", "Quote", "", "", "", "Backslash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
Global mousenames$[]=["Mouse Left","Mouse Right","Mouse Middle"]


I actually checked this one a few times and got some that were missing in the documentation, and I made a spreadsheet.

Nice, everything I need. Thanks.