Attribute VB_Name = "VBKeyFunctions"
Option Explicit
'=======================================================================
' Filename: VBKeyFunctions.bas
' Written By: Ryan Olbe
' Website: http://www.rolbe.com
' Last Updated: May 31, 2006
'=======================================================================
'
' Functions contained in this Module
'
' 1.) ConstantFromKeyAscii(keyascii As Integer) As String
' 2.) ConstantFromKeyCode(keycode As Integer) As String
' 3.) WriteCharFromKeyCode(keycode As Integer, shiftdown As Boolean) As String
' 4.) WriteCharFromKeyAscii(keyascii As Integer) As String
' 5.) WriteKeyAsciiFromKeyCode(keycode As Integer, shiftdown As Boolean) as String
' 6.) WriteKeyCodeFromKeyAscii(keyascii As Integer) As String
' 7.) WriteKeyAsciiFromChar(someChar as String) as Integer
' 8.) WriteKeyCodeFromChar(someChar as String) as Integer
' 9.) IsShiftCharacter(someChar as String) as Boolean
' 10.) IsShiftDown(shift as integer) as Boolean
' 11.) IsCtrlDown(shift as integer) as Boolean
' 12.) IsAltDown(shift as integer) as Boolean

' -----------------------------------------
' Notes about Chr() and Asc()
' -----------------------------------------
' The Chr() function returns the character (in string form) corresponding to a
' given ASCII code. For example, Chr(66) returns "B", the character equivalent
' of KeyAscii value 66. You can ONLY give Chr() a numeric value that is between
' 0 and 255. If you give Chr() a number that's larger than 255 you will get a
' run-time error which says "invalid procedure call or argument".

' The Asc() function returns the ASCII code corresponding to a given character.
' For example, Asc("a") returns 97, the ASCII code for lowercase "a". If the
' given string contains more than one character, Asc() returns the ASCII code
' of the first character only.
' -----------------------------------------

'1.) ConstantFromKeyAscii() is a function that will take
'a keyascii value and will output the corresponding VB Constant value
'(if one exists).  If one does not exist, the function will return "N/A"
Public Function ConstantFromKeyAscii(KeyAscii As Integer) As String
 Select Case KeyAscii
  Case 8: ConstantFromKeyAscii = "vbKeyBack"
  Case 9: ConstantFromKeyAscii = "vbKeyTab"
  Case 13: ConstantFromKeyAscii = "vbKeyReturn"
  Case 27: ConstantFromKeyAscii = "vbKeyEscape"
  Case 32: ConstantFromKeyAscii = "vbKeySpace"
  Case 33: ConstantFromKeyAscii = "vbKey1" '!
  Case 35: ConstantFromKeyAscii = "vbKey3" '#
  Case 36: ConstantFromKeyAscii = "vbKey4" '$
  Case 37: ConstantFromKeyAscii = "vbKey5" '%
  Case 38: ConstantFromKeyAscii = "vbKey7" '&
  Case 40: ConstantFromKeyAscii = "vbKey9" '(
  Case 41: ConstantFromKeyAscii = "vbKey0" ')
  Case 42: ConstantFromKeyAscii = "vbKey8" '*
  Case 48: ConstantFromKeyAscii = "vbKey0"
  Case 49: ConstantFromKeyAscii = "vbKey1"
  Case 50: ConstantFromKeyAscii = "vbKey2"
  Case 51: ConstantFromKeyAscii = "vbKey3"
  Case 52: ConstantFromKeyAscii = "vbKey4"
  Case 53: ConstantFromKeyAscii = "vbKey5"
  Case 54: ConstantFromKeyAscii = "vbKey6"
  Case 55: ConstantFromKeyAscii = "vbKey7"
  Case 56: ConstantFromKeyAscii = "vbKey8"
  Case 57: ConstantFromKeyAscii = "vbKey9"
  Case 64: ConstantFromKeyAscii = "vbKey2" '@
  Case 65: ConstantFromKeyAscii = "vbKeyA"
  Case 66: ConstantFromKeyAscii = "vbKeyB"
  Case 67: ConstantFromKeyAscii = "vbKeyC"
  Case 68: ConstantFromKeyAscii = "vbKeyD"
  Case 69: ConstantFromKeyAscii = "vbKeyE"
  Case 70: ConstantFromKeyAscii = "vbKeyF"
  Case 71: ConstantFromKeyAscii = "vbKeyG"
  Case 72: ConstantFromKeyAscii = "vbKeyH"
  Case 73: ConstantFromKeyAscii = "vbKeyI"
  Case 74: ConstantFromKeyAscii = "vbKeyJ"
  Case 75: ConstantFromKeyAscii = "vbKeyK"
  Case 76: ConstantFromKeyAscii = "vbKeyL"
  Case 77: ConstantFromKeyAscii = "vbKeyM"
  Case 78: ConstantFromKeyAscii = "vbKeyN"
  Case 79: ConstantFromKeyAscii = "vbKeyO"
  Case 80: ConstantFromKeyAscii = "vbKeyP"
  Case 81: ConstantFromKeyAscii = "vbKeyQ"
  Case 82: ConstantFromKeyAscii = "vbKeyR"
  Case 83: ConstantFromKeyAscii = "vbKeyS"
  Case 84: ConstantFromKeyAscii = "vbKeyT"
  Case 85: ConstantFromKeyAscii = "vbKeyU"
  Case 86: ConstantFromKeyAscii = "vbKeyV"
  Case 87: ConstantFromKeyAscii = "vbKeyW"
  Case 88: ConstantFromKeyAscii = "vbKeyX"
  Case 89: ConstantFromKeyAscii = "vbKeyY"
  Case 90: ConstantFromKeyAscii = "vbKeyZ"
  Case 94: ConstantFromKeyAscii = "vbKey6" '^
  Case 97: ConstantFromKeyAscii = "vbKeyA" 'a
  Case 98: ConstantFromKeyAscii = "vbKeyB" 'b
  Case 99: ConstantFromKeyAscii = "vbKeyC" 'c
  Case 100: ConstantFromKeyAscii = "vbKeyD" 'd
  Case 101: ConstantFromKeyAscii = "vbKeyE" 'e
  Case 102: ConstantFromKeyAscii = "vbKeyF" 'f
  Case 103: ConstantFromKeyAscii = "vbKeyG" 'g
  Case 104: ConstantFromKeyAscii = "vbKeyH" 'h
  Case 105: ConstantFromKeyAscii = "vbKeyI" 'i
  Case 106: ConstantFromKeyAscii = "vbKeyJ" 'j
  Case 107: ConstantFromKeyAscii = "vbKeyK" 'k
  Case 108: ConstantFromKeyAscii = "vbKeyL" 'l
  Case 109: ConstantFromKeyAscii = "vbKeyM" 'm
  Case 110: ConstantFromKeyAscii = "vbKeyN" 'n
  Case 111: ConstantFromKeyAscii = "vbKeyO" 'o
  Case 112: ConstantFromKeyAscii = "vbKeyP" 'p
  Case 113: ConstantFromKeyAscii = "vbKeyQ" 'q
  Case 114: ConstantFromKeyAscii = "vbKeyR" 'r
  Case 115: ConstantFromKeyAscii = "vbKeyS" 's
  Case 116: ConstantFromKeyAscii = "vbKeyT" 't
  Case 117: ConstantFromKeyAscii = "vbKeyU" 'u
  Case 118: ConstantFromKeyAscii = "vbKeyV" 'v
  Case 119: ConstantFromKeyAscii = "vbKeyW" 'w
  Case 120: ConstantFromKeyAscii = "vbKeyX" 'x
  Case 121: ConstantFromKeyAscii = "vbKeyY" 'y
  Case 122: ConstantFromKeyAscii = "vbKeyZ" 'z
  Case Else: ConstantFromKeyAscii = "N/A"
 End Select
End Function

'2.) ConstantFromKeyCode() is a function that will take
'a KeyCode value and will output the corresponding VB Constant value
'(if one exists).  If one does not exist, the function will return "N/A".
Public Function ConstantFromKeyCode(KeyCode As Integer) As String
 Select Case KeyCode
  Case 1: ConstantFromKeyCode = "vbKeyLButton"
  Case 2: ConstantFromKeyCode = "vbKeyRButton"
  Case 3: ConstantFromKeyCode = "vbKeyCancel"
  Case 4: ConstantFromKeyCode = "vbKeyMButton"
  Case 8: ConstantFromKeyCode = "vbKeyBack"
  Case 9: ConstantFromKeyCode = "vbKeyTab"
  Case 12: ConstantFromKeyCode = "vbKeyClear"
  Case 13: ConstantFromKeyCode = "vbKeyReturn"
  Case 16: ConstantFromKeyCode = "vbKeyShift"
  Case 17: ConstantFromKeyCode = "vbKeyControl"
  Case 18: ConstantFromKeyCode = "vbKeyMenu"
  Case 19: ConstantFromKeyCode = "vbKeyPause"
  Case 20: ConstantFromKeyCode = "vbKeyCapital"
  Case 27: ConstantFromKeyCode = "vbKeyEscape"
  Case 32: ConstantFromKeyCode = "vbKeySpace"
  Case 33: ConstantFromKeyCode = "vbKeyPageUp"
  Case 34: ConstantFromKeyCode = "vbKeyPageDown"
  Case 35: ConstantFromKeyCode = "vbKeyEnd"
  Case 36: ConstantFromKeyCode = "vbKeyHome"
  Case 37: ConstantFromKeyCode = "vbKeyLeft"
  Case 38: ConstantFromKeyCode = "vbKeyUp"
  Case 39: ConstantFromKeyCode = "vbKeyRight"
  Case 40: ConstantFromKeyCode = "vbKeyDown"
  Case 41: ConstantFromKeyCode = "vbKeySelect"
  Case 42: ConstantFromKeyCode = "vbKeyPrint"
  Case 43: ConstantFromKeyCode = "vbKeyExecute"
  Case 44: ConstantFromKeyCode = "vbKeySnapshot"
  Case 45: ConstantFromKeyCode = "vbKeyInsert"
  Case 46: ConstantFromKeyCode = "vbKeyDelete"
  Case 47: ConstantFromKeyCode = "vbKeyHelp"
  Case 48: ConstantFromKeyCode = "vbKey0"
  Case 49: ConstantFromKeyCode = "vbKey1"
  Case 50: ConstantFromKeyCode = "vbKey2"
  Case 51: ConstantFromKeyCode = "vbKey3"
  Case 52: ConstantFromKeyCode = "vbKey4"
  Case 53: ConstantFromKeyCode = "vbKey5"
  Case 54: ConstantFromKeyCode = "vbKey6"
  Case 55: ConstantFromKeyCode = "vbKey7"
  Case 56: ConstantFromKeyCode = "vbKey8"
  Case 57: ConstantFromKeyCode = "vbKey9"
  Case 65: ConstantFromKeyCode = "vbKeyA"
  Case 66: ConstantFromKeyCode = "vbKeyB"
  Case 67: ConstantFromKeyCode = "vbKeyC"
  Case 68: ConstantFromKeyCode = "vbKeyD"
  Case 69: ConstantFromKeyCode = "vbKeyE"
  Case 70: ConstantFromKeyCode = "vbKeyF"
  Case 71: ConstantFromKeyCode = "vbKeyG"
  Case 72: ConstantFromKeyCode = "vbKeyH"
  Case 73: ConstantFromKeyCode = "vbKeyI"
  Case 74: ConstantFromKeyCode = "vbKeyJ"
  Case 75: ConstantFromKeyCode = "vbKeyK"
  Case 76: ConstantFromKeyCode = "vbKeyL"
  Case 77: ConstantFromKeyCode = "vbKeyM"
  Case 78: ConstantFromKeyCode = "vbKeyN"
  Case 79: ConstantFromKeyCode = "vbKeyO"
  Case 80: ConstantFromKeyCode = "vbKeyP"
  Case 81: ConstantFromKeyCode = "vbKeyQ"
  Case 82: ConstantFromKeyCode = "vbKeyR"
  Case 83: ConstantFromKeyCode = "vbKeyS"
  Case 84: ConstantFromKeyCode = "vbKeyT"
  Case 85: ConstantFromKeyCode = "vbKeyU"
  Case 86: ConstantFromKeyCode = "vbKeyV"
  Case 87: ConstantFromKeyCode = "vbKeyW"
  Case 88: ConstantFromKeyCode = "vbKeyX"
  Case 89: ConstantFromKeyCode = "vbKeyY"
  Case 90: ConstantFromKeyCode = "vbKeyZ"
  Case 96: ConstantFromKeyCode = "vbKeyNumpad0"
  Case 97: ConstantFromKeyCode = "vbKeyNumpad1"
  Case 98: ConstantFromKeyCode = "vbKeyNumpad2"
  Case 99: ConstantFromKeyCode = "vbKeyNumpad3"
  Case 100: ConstantFromKeyCode = "vbKeyNumpad4"
  Case 101: ConstantFromKeyCode = "vbKeyNumpad5"
  Case 102: ConstantFromKeyCode = "vbKeyNumpad6"
  Case 103: ConstantFromKeyCode = "vbKeyNumpad7"
  Case 104: ConstantFromKeyCode = "vbKeyNumpad8"
  Case 105: ConstantFromKeyCode = "vbKeyNumpad9"
  Case 106: ConstantFromKeyCode = "vbKeyMultiply"
  Case 107: ConstantFromKeyCode = "vbKeyAdd"
  Case 108: ConstantFromKeyCode = "vbKeySeparator"
  Case 109: ConstantFromKeyCode = "vbKeySubtract"
  Case 110: ConstantFromKeyCode = "vbKeyDecimal"
  Case 111: ConstantFromKeyCode = "vbKeyDivide"
  Case 112: ConstantFromKeyCode = "vbKeyF1"
  Case 113: ConstantFromKeyCode = "vbKeyF2"
  Case 114: ConstantFromKeyCode = "vbKeyF3"
  Case 115: ConstantFromKeyCode = "vbKeyF4"
  Case 116: ConstantFromKeyCode = "vbKeyF5"
  Case 117: ConstantFromKeyCode = "vbKeyF6"
  Case 118: ConstantFromKeyCode = "vbKeyF7"
  Case 119: ConstantFromKeyCode = "vbKeyF8"
  Case 120: ConstantFromKeyCode = "vbKeyF9"
  Case 121: ConstantFromKeyCode = "vbKeyF10"
  Case 122: ConstantFromKeyCode = "vbKeyF11"
  Case 123: ConstantFromKeyCode = "vbKeyF12"
  Case 124: ConstantFromKeyCode = "vbKeyF13"
  Case 125: ConstantFromKeyCode = "vbKeyF14"
  Case 126: ConstantFromKeyCode = "vbKeyF15"
  Case 127: ConstantFromKeyCode = "vbKeyF16"
  Case 144: ConstantFromKeyCode = "vbKeyNumlock"
  Case Else: ConstantFromKeyCode = "N/A"
 End Select
End Function

'3.) WriteCharFromKeyCode() is a function that will take
'a keycode value and will output it's respective character.
'It takes two arguments, one is the keycode number itself and the
'other is a boolean value called shiftdown.  If the SHIFT key is being
'held down you would say true, and if it's not you would say false.
'This function will then return the approriate character.
Public Function WriteCharFromKeyCode(KeyCode As Integer, shiftdown As Boolean) As String
If shiftdown = True Then 'shift is down
 Select Case KeyCode
  Case 0: WriteCharFromKeyCode = "NO KEY"
  Case 1: WriteCharFromKeyCode = "LMOUSE"
  Case 2: WriteCharFromKeyCode = "RMOUSE"
  Case 3: WriteCharFromKeyCode = "CANCEL"
  Case 4: WriteCharFromKeyCode = "MMOUSE"
  Case 5: WriteCharFromKeyCode = "FIRST X"
  Case 6: WriteCharFromKeyCode = "SECOND X"
  Case 7: WriteCharFromKeyCode = "Undefined"
  Case 8: WriteCharFromKeyCode = "BACKSPACE"
  Case 9: WriteCharFromKeyCode = "TAB"
  Case 10: WriteCharFromKeyCode = "LINEFEED"
  Case 11: WriteCharFromKeyCode = "Undefined"
  Case 12: WriteCharFromKeyCode = "CLEAR"
  Case 13: WriteCharFromKeyCode = "RETURN"
  Case 14: WriteCharFromKeyCode = "Undefined"
  Case 15: WriteCharFromKeyCode = "Undefined"
  Case 16: WriteCharFromKeyCode = "SHIFT"
  Case 17: WriteCharFromKeyCode = "CTRL"
  Case 18: WriteCharFromKeyCode = "ALT"
  Case 19: WriteCharFromKeyCode = "PAUSE"
  Case 20: WriteCharFromKeyCode = "CAPSLOCK"
  Case 21: WriteCharFromKeyCode = "IME_KANA"
  Case 22: WriteCharFromKeyCode = "Undefined"
  Case 23: WriteCharFromKeyCode = "IME_JUNJA"
  Case 24: WriteCharFromKeyCode = "IME_FINAL"
  Case 25: WriteCharFromKeyCode = "IME_HANJA"
  Case 26: WriteCharFromKeyCode = "Undefined"
  Case 27: WriteCharFromKeyCode = "ESC"
  Case 28: WriteCharFromKeyCode = "IME_CONV"
  Case 29: WriteCharFromKeyCode = "IME_NONC"
  Case 30: WriteCharFromKeyCode = "IME_ACPT"
  Case 31: WriteCharFromKeyCode = "IME_MODE"
  Case 32: WriteCharFromKeyCode = "SPACE"
  Case 33: WriteCharFromKeyCode = "PGUP"
  Case 34: WriteCharFromKeyCode = "PGDN"
  Case 35: WriteCharFromKeyCode = "END"
  Case 36: WriteCharFromKeyCode = "HOME"
  Case 37: WriteCharFromKeyCode = "LEFT"
  Case 38: WriteCharFromKeyCode = "UP"
  Case 39: WriteCharFromKeyCode = "RIGHT"
  Case 40: WriteCharFromKeyCode = "DOWN"
  Case 41: WriteCharFromKeyCode = "SELECT"
  Case 42: WriteCharFromKeyCode = "PRINT"
  Case 43: WriteCharFromKeyCode = "EXECUTE"
  Case 44: WriteCharFromKeyCode = "PRINTSCR"
  Case 45: WriteCharFromKeyCode = "INSERT"
  Case 46: WriteCharFromKeyCode = "DELETE"
  Case 47: WriteCharFromKeyCode = "HELP"
  Case 48: WriteCharFromKeyCode = ")"
  Case 49: WriteCharFromKeyCode = "!"
  Case 50: WriteCharFromKeyCode = "@"
  Case 51: WriteCharFromKeyCode = "#"
  Case 52: WriteCharFromKeyCode = "$"
  Case 53: WriteCharFromKeyCode = "%"
  Case 54: WriteCharFromKeyCode = "^"
  Case 55: WriteCharFromKeyCode = "&"
  Case 56: WriteCharFromKeyCode = "*"
  Case 57: WriteCharFromKeyCode = "("
  Case 58: WriteCharFromKeyCode = "Undefined"
  Case 59: WriteCharFromKeyCode = "Undefined"
  Case 60: WriteCharFromKeyCode = "Undefined"
  Case 61: WriteCharFromKeyCode = "Undefined"
  Case 62: WriteCharFromKeyCode = "Undefined"
  Case 63: WriteCharFromKeyCode = "Undefined"
  Case 64: WriteCharFromKeyCode = "Undefined"
  Case 65: WriteCharFromKeyCode = "A"
  Case 66: WriteCharFromKeyCode = "B"
  Case 67: WriteCharFromKeyCode = "C"
  Case 68: WriteCharFromKeyCode = "D"
  Case 69: WriteCharFromKeyCode = "E"
  Case 70: WriteCharFromKeyCode = "F"
  Case 71: WriteCharFromKeyCode = "G"
  Case 72: WriteCharFromKeyCode = "H"
  Case 73: WriteCharFromKeyCode = "I"
  Case 74: WriteCharFromKeyCode = "J"
  Case 75: WriteCharFromKeyCode = "K"
  Case 76: WriteCharFromKeyCode = "L"
  Case 77: WriteCharFromKeyCode = "M"
  Case 78: WriteCharFromKeyCode = "N"
  Case 79: WriteCharFromKeyCode = "O"
  Case 80: WriteCharFromKeyCode = "P"
  Case 81: WriteCharFromKeyCode = "Q"
  Case 82: WriteCharFromKeyCode = "R"
  Case 83: WriteCharFromKeyCode = "S"
  Case 84: WriteCharFromKeyCode = "T"
  Case 85: WriteCharFromKeyCode = "U"
  Case 86: WriteCharFromKeyCode = "V"
  Case 87: WriteCharFromKeyCode = "W"
  Case 88: WriteCharFromKeyCode = "X"
  Case 89: WriteCharFromKeyCode = "Y"
  Case 90: WriteCharFromKeyCode = "Z"
  Case 91: WriteCharFromKeyCode = "LWINDOWS"
  Case 92: WriteCharFromKeyCode = "RWINDOWS"
  Case 93: WriteCharFromKeyCode = "CONTEXT"
  Case 94: WriteCharFromKeyCode = "Reserved"
  Case 95: WriteCharFromKeyCode = "SLEEP"
  Case 96: WriteCharFromKeyCode = "INSERT"
  Case 97: WriteCharFromKeyCode = "END"
  Case 98: WriteCharFromKeyCode = "DOWN"
  Case 99: WriteCharFromKeyCode = "PGDN"
  Case 100: WriteCharFromKeyCode = "LEFT"
  Case 101: WriteCharFromKeyCode = "5"
  Case 102: WriteCharFromKeyCode = "RIGHT"
  Case 103: WriteCharFromKeyCode = "HOME"
  Case 104: WriteCharFromKeyCode = "UP"
  Case 105: WriteCharFromKeyCode = "PGUP"
  Case 106: WriteCharFromKeyCode = "*"
  Case 107: WriteCharFromKeyCode = "+"
  Case 108: WriteCharFromKeyCode = "SEPARATOR"
  Case 109: WriteCharFromKeyCode = "-"
  Case 110: WriteCharFromKeyCode = "DEL"
  Case 111: WriteCharFromKeyCode = "/"
  Case 112: WriteCharFromKeyCode = "F1"
  Case 113: WriteCharFromKeyCode = "F2"
  Case 114: WriteCharFromKeyCode = "F3"
  Case 115: WriteCharFromKeyCode = "F4"
  Case 116: WriteCharFromKeyCode = "F5"
  Case 117: WriteCharFromKeyCode = "F6"
  Case 118: WriteCharFromKeyCode = "F7"
  Case 119: WriteCharFromKeyCode = "F8"
  Case 120: WriteCharFromKeyCode = "F9"
  Case 121: WriteCharFromKeyCode = "F10"
  Case 122: WriteCharFromKeyCode = "F11"
  Case 123: WriteCharFromKeyCode = "F12"
  Case 124: WriteCharFromKeyCode = "F13"
  Case 125: WriteCharFromKeyCode = "F14"
  Case 126: WriteCharFromKeyCode = "F15"
  Case 127: WriteCharFromKeyCode = "F16"
  Case 128: WriteCharFromKeyCode = "F17"
  Case 129: WriteCharFromKeyCode = "F18"
  Case 130: WriteCharFromKeyCode = "F19"
  Case 131: WriteCharFromKeyCode = "F20"
  Case 132: WriteCharFromKeyCode = "F21"
  Case 133: WriteCharFromKeyCode = "F22"
  Case 134: WriteCharFromKeyCode = "F23"
  Case 135: WriteCharFromKeyCode = "F24"
  Case 136: WriteCharFromKeyCode = "Unassigned"
  Case 137: WriteCharFromKeyCode = "Unassigned"
  Case 138: WriteCharFromKeyCode = "Unassigned"
  Case 139: WriteCharFromKeyCode = "Unassigned"
  Case 140: WriteCharFromKeyCode = "Unassigned"
  Case 141: WriteCharFromKeyCode = "Unassigned"
  Case 142: WriteCharFromKeyCode = "Unassigned"
  Case 143: WriteCharFromKeyCode = "Unassigned"
  Case 144: WriteCharFromKeyCode = "NUMLOCK"
  Case 145: WriteCharFromKeyCode = "SCRLLOCK"
  Case 146: WriteCharFromKeyCode = "OEM specific"
  Case 147: WriteCharFromKeyCode = "OEM specific"
  Case 148: WriteCharFromKeyCode = "OEM specific"
  Case 149: WriteCharFromKeyCode = "OEM specific"
  Case 150: WriteCharFromKeyCode = "OEM specific"
  Case 151: WriteCharFromKeyCode = "Unassigned"
  Case 152: WriteCharFromKeyCode = "Unassigned"
  Case 153: WriteCharFromKeyCode = "Unassigned"
  Case 154: WriteCharFromKeyCode = "Unassigned"
  Case 155: WriteCharFromKeyCode = "Unassigned"
  Case 156: WriteCharFromKeyCode = "Unassigned"
  Case 157: WriteCharFromKeyCode = "Unassigned"
  Case 158: WriteCharFromKeyCode = "Unassigned"
  Case 159: WriteCharFromKeyCode = "Unassigned"
  Case 160: WriteCharFromKeyCode = "LSHIFT"
  Case 161: WriteCharFromKeyCode = "RSHIFT"
  Case 162: WriteCharFromKeyCode = "LCTRL"
  Case 163: WriteCharFromKeyCode = "RCTRL"
  Case 164: WriteCharFromKeyCode = "LALT"
  Case 165: WriteCharFromKeyCode = "RALT"
  Case 166: WriteCharFromKeyCode = "BACK"
  Case 167: WriteCharFromKeyCode = "FORWARD"
  Case 168: WriteCharFromKeyCode = "REFRESH"
  Case 169: WriteCharFromKeyCode = "STOP"
  Case 170: WriteCharFromKeyCode = "SEARCH"
  Case 171: WriteCharFromKeyCode = "FAVORITES"
  Case 172: WriteCharFromKeyCode = "HOME"
  Case 173: WriteCharFromKeyCode = "MUTE"
  Case 174: WriteCharFromKeyCode = "VOLDOWN"
  Case 175: WriteCharFromKeyCode = "VOLUP"
  Case 176: WriteCharFromKeyCode = "NEXT"
  Case 177: WriteCharFromKeyCode = "PREV"
  Case 178: WriteCharFromKeyCode = "STOP"
  Case 179: WriteCharFromKeyCode = "PLAY"
  Case 180: WriteCharFromKeyCode = "EMAIL"
  Case 181: WriteCharFromKeyCode = "MEDIA"
  Case 182: WriteCharFromKeyCode = "START1"
  Case 183: WriteCharFromKeyCode = "START2"
  Case 184: WriteCharFromKeyCode = "Reserved"
  Case 185: WriteCharFromKeyCode = "Reserved"
  Case 186: WriteCharFromKeyCode = ":"
  Case 187: WriteCharFromKeyCode = "+"
  Case 188: WriteCharFromKeyCode = "<"
  Case 189: WriteCharFromKeyCode = "_"
  Case 190: WriteCharFromKeyCode = ">"
  Case 191: WriteCharFromKeyCode = "?"
  Case 192: WriteCharFromKeyCode = "~"
  Case 193: WriteCharFromKeyCode = "Reserved"
  Case 194: WriteCharFromKeyCode = "Reserved"
  Case 195: WriteCharFromKeyCode = "Reserved"
  Case 196: WriteCharFromKeyCode = "Reserved"
  Case 197: WriteCharFromKeyCode = "Reserved"
  Case 198: WriteCharFromKeyCode = "Reserved"
  Case 199: WriteCharFromKeyCode = "Reserved"
  Case 200: WriteCharFromKeyCode = "Reserved"
  Case 201: WriteCharFromKeyCode = "Reserved"
  Case 202: WriteCharFromKeyCode = "Reserved"
  Case 203: WriteCharFromKeyCode = "Reserved"
  Case 204: WriteCharFromKeyCode = "Reserved"
  Case 205: WriteCharFromKeyCode = "Reserved"
  Case 206: WriteCharFromKeyCode = "Reserved"
  Case 207: WriteCharFromKeyCode = "Reserved"
  Case 208: WriteCharFromKeyCode = "Reserved"
  Case 209: WriteCharFromKeyCode = "Reserved"
  Case 210: WriteCharFromKeyCode = "Reserved"
  Case 211: WriteCharFromKeyCode = "Reserved"
  Case 212: WriteCharFromKeyCode = "Reserved"
  Case 213: WriteCharFromKeyCode = "Reserved"
  Case 214: WriteCharFromKeyCode = "Reserved"
  Case 215: WriteCharFromKeyCode = "Reserved"
  Case 216: WriteCharFromKeyCode = "Unassigned"
  Case 217: WriteCharFromKeyCode = "Unassigned"
  Case 218: WriteCharFromKeyCode = "Unassigned"
  Case 219: WriteCharFromKeyCode = "{"
  Case 220: WriteCharFromKeyCode = "|"
  Case 221: WriteCharFromKeyCode = "}"
  Case 222: WriteCharFromKeyCode = """"
  Case 223: WriteCharFromKeyCode = "MISC"
  Case 224: WriteCharFromKeyCode = "Reserved"
  Case 225: WriteCharFromKeyCode = "OEM"
  Case 226: WriteCharFromKeyCode = "OEM ANG"
  Case 227: WriteCharFromKeyCode = "OEM"
  Case 228: WriteCharFromKeyCode = "OEM"
  Case 229: WriteCharFromKeyCode = "PROCESS"
  Case 230: WriteCharFromKeyCode = "OEM"
  Case 231: WriteCharFromKeyCode = "UNICODE"
  Case 232: WriteCharFromKeyCode = "Unassigned"
  Case 233: WriteCharFromKeyCode = "OEM specific"
  Case 234: WriteCharFromKeyCode = "OEM specific"
  Case 235: WriteCharFromKeyCode = "OEM specific"
  Case 236: WriteCharFromKeyCode = "OEM specific"
  Case 237: WriteCharFromKeyCode = "OEM specific"
  Case 238: WriteCharFromKeyCode = "OEM specific"
  Case 239: WriteCharFromKeyCode = "OEM specific"
  Case 240: WriteCharFromKeyCode = "OEM specific"
  Case 241: WriteCharFromKeyCode = "OEM specific"
  Case 242: WriteCharFromKeyCode = "OEM specific"
  Case 243: WriteCharFromKeyCode = "OEM specific"
  Case 244: WriteCharFromKeyCode = "OEM specific"
  Case 245: WriteCharFromKeyCode = "OEM specific"
  Case 246: WriteCharFromKeyCode = "ATTN"
  Case 247: WriteCharFromKeyCode = "CRSEL"
  Case 248: WriteCharFromKeyCode = "EXSEL"
  Case 249: WriteCharFromKeyCode = "ERASE EOF"
  Case 250: WriteCharFromKeyCode = "PLAY"
  Case 251: WriteCharFromKeyCode = "ZOOM"
  Case 252: WriteCharFromKeyCode = "Reserved"
  Case 253: WriteCharFromKeyCode = "PA1"
  Case 254: WriteCharFromKeyCode = "CLEAR"
  Case 255: WriteCharFromKeyCode = "MISC"
  Case Else: WriteCharFromKeyCode = "UNKNOWN"
 End Select

Else 'shift is not down
 Select Case KeyCode
  Case 0: WriteCharFromKeyCode = "NO KEY"
  Case 1: WriteCharFromKeyCode = "LMOUSE"
  Case 2: WriteCharFromKeyCode = "RMOUSE"
  Case 3: WriteCharFromKeyCode = "CANCEL"
  Case 4: WriteCharFromKeyCode = "MMOUSE"
  Case 5: WriteCharFromKeyCode = "FIRST X"
  Case 6: WriteCharFromKeyCode = "SECOND X"
  Case 7: WriteCharFromKeyCode = "Undefined"
  Case 8: WriteCharFromKeyCode = "BACKSPACE"
  Case 9: WriteCharFromKeyCode = "TAB"
  Case 10: WriteCharFromKeyCode = "LINEFEED"
  Case 11: WriteCharFromKeyCode = "Undefined"
  Case 12: WriteCharFromKeyCode = "CLEAR"
  Case 13: WriteCharFromKeyCode = "RETURN"
  Case 14: WriteCharFromKeyCode = "Undefined"
  Case 15: WriteCharFromKeyCode = "Undefined"
  Case 16: WriteCharFromKeyCode = "SHIFT"
  Case 17: WriteCharFromKeyCode = "CTRL"
  Case 18: WriteCharFromKeyCode = "ALT"
  Case 19: WriteCharFromKeyCode = "PAUSE"
  Case 20: WriteCharFromKeyCode = "CAPSLOCK"
  Case 21: WriteCharFromKeyCode = "IME_KANA"
  Case 22: WriteCharFromKeyCode = "Undefined"
  Case 23: WriteCharFromKeyCode = "IME_JUNJA"
  Case 24: WriteCharFromKeyCode = "IME_FINAL"
  Case 25: WriteCharFromKeyCode = "IME_HANJA"
  Case 26: WriteCharFromKeyCode = "Undefined"
  Case 27: WriteCharFromKeyCode = "ESC"
  Case 28: WriteCharFromKeyCode = "IME_CONV"
  Case 29: WriteCharFromKeyCode = "IME_NONC"
  Case 30: WriteCharFromKeyCode = "IME_ACPT"
  Case 31: WriteCharFromKeyCode = "IME_MODE"
  Case 32: WriteCharFromKeyCode = "SPACE"
  Case 33: WriteCharFromKeyCode = "PGUP"
  Case 34: WriteCharFromKeyCode = "PGDN"
  Case 35: WriteCharFromKeyCode = "END"
  Case 36: WriteCharFromKeyCode = "HOME"
  Case 37: WriteCharFromKeyCode = "LEFT"
  Case 38: WriteCharFromKeyCode = "UP"
  Case 39: WriteCharFromKeyCode = "RIGHT"
  Case 40: WriteCharFromKeyCode = "DOWN"
  Case 41: WriteCharFromKeyCode = "SELECT"
  Case 42: WriteCharFromKeyCode = "PRINT"
  Case 43: WriteCharFromKeyCode = "EXECUTE"
  Case 44: WriteCharFromKeyCode = "PRINTSCR"
  Case 45: WriteCharFromKeyCode = "INSERT"
  Case 46: WriteCharFromKeyCode = "DELETE"
  Case 47: WriteCharFromKeyCode = "HELP"
  Case 48: WriteCharFromKeyCode = "0"
  Case 49: WriteCharFromKeyCode = "1"
  Case 50: WriteCharFromKeyCode = "2"
  Case 51: WriteCharFromKeyCode = "3"
  Case 52: WriteCharFromKeyCode = "4"
  Case 53: WriteCharFromKeyCode = "5"
  Case 54: WriteCharFromKeyCode = "6"
  Case 55: WriteCharFromKeyCode = "7"
  Case 56: WriteCharFromKeyCode = "8"
  Case 57: WriteCharFromKeyCode = "9"
  Case 58: WriteCharFromKeyCode = "Undefined"
  Case 59: WriteCharFromKeyCode = "Undefined"
  Case 60: WriteCharFromKeyCode = "Undefined"
  Case 61: WriteCharFromKeyCode = "Undefined"
  Case 62: WriteCharFromKeyCode = "Undefined"
  Case 63: WriteCharFromKeyCode = "Undefined"
  Case 64: WriteCharFromKeyCode = "Undefined"
  Case 65: WriteCharFromKeyCode = "A"
  Case 66: WriteCharFromKeyCode = "B"
  Case 67: WriteCharFromKeyCode = "C"
  Case 68: WriteCharFromKeyCode = "D"
  Case 69: WriteCharFromKeyCode = "E"
  Case 70: WriteCharFromKeyCode = "F"
  Case 71: WriteCharFromKeyCode = "G"
  Case 72: WriteCharFromKeyCode = "H"
  Case 73: WriteCharFromKeyCode = "I"
  Case 74: WriteCharFromKeyCode = "J"
  Case 75: WriteCharFromKeyCode = "K"
  Case 76: WriteCharFromKeyCode = "L"
  Case 77: WriteCharFromKeyCode = "M"
  Case 78: WriteCharFromKeyCode = "N"
  Case 79: WriteCharFromKeyCode = "O"
  Case 80: WriteCharFromKeyCode = "P"
  Case 81: WriteCharFromKeyCode = "Q"
  Case 82: WriteCharFromKeyCode = "R"
  Case 83: WriteCharFromKeyCode = "S"
  Case 84: WriteCharFromKeyCode = "T"
  Case 85: WriteCharFromKeyCode = "U"
  Case 86: WriteCharFromKeyCode = "V"
  Case 87: WriteCharFromKeyCode = "W"
  Case 88: WriteCharFromKeyCode = "X"
  Case 89: WriteCharFromKeyCode = "Y"
  Case 90: WriteCharFromKeyCode = "Z"
  Case 91: WriteCharFromKeyCode = "LWINDOWS"
  Case 92: WriteCharFromKeyCode = "RWINDOWS"
  Case 93: WriteCharFromKeyCode = "CONTEXT"
  Case 94: WriteCharFromKeyCode = "Reserved"
  Case 95: WriteCharFromKeyCode = "SLEEP"
  Case 96: WriteCharFromKeyCode = "0"
  Case 97: WriteCharFromKeyCode = "1"
  Case 98: WriteCharFromKeyCode = "2"
  Case 99: WriteCharFromKeyCode = "3"
  Case 100: WriteCharFromKeyCode = "4"
  Case 101: WriteCharFromKeyCode = "5"
  Case 102: WriteCharFromKeyCode = "6"
  Case 103: WriteCharFromKeyCode = "7"
  Case 104: WriteCharFromKeyCode = "8"
  Case 105: WriteCharFromKeyCode = "9"
  Case 106: WriteCharFromKeyCode = "*"
  Case 107: WriteCharFromKeyCode = "+"
  Case 108: WriteCharFromKeyCode = "SEPARATOR"
  Case 109: WriteCharFromKeyCode = "-"
  Case 110: WriteCharFromKeyCode = "."
  Case 111: WriteCharFromKeyCode = "/"
  Case 112: WriteCharFromKeyCode = "F1"
  Case 113: WriteCharFromKeyCode = "F2"
  Case 114: WriteCharFromKeyCode = "F3"
  Case 115: WriteCharFromKeyCode = "F4"
  Case 116: WriteCharFromKeyCode = "F5"
  Case 117: WriteCharFromKeyCode = "F6"
  Case 118: WriteCharFromKeyCode = "F7"
  Case 119: WriteCharFromKeyCode = "F8"
  Case 120: WriteCharFromKeyCode = "F9"
  Case 121: WriteCharFromKeyCode = "F10"
  Case 122: WriteCharFromKeyCode = "F11"
  Case 123: WriteCharFromKeyCode = "F12"
  Case 124: WriteCharFromKeyCode = "F13"
  Case 125: WriteCharFromKeyCode = "F14"
  Case 126: WriteCharFromKeyCode = "F15"
  Case 127: WriteCharFromKeyCode = "F16"
  Case 128: WriteCharFromKeyCode = "F17"
  Case 129: WriteCharFromKeyCode = "F18"
  Case 130: WriteCharFromKeyCode = "F19"
  Case 131: WriteCharFromKeyCode = "F20"
  Case 132: WriteCharFromKeyCode = "F21"
  Case 133: WriteCharFromKeyCode = "F22"
  Case 134: WriteCharFromKeyCode = "F23"
  Case 135: WriteCharFromKeyCode = "F24"
  Case 136: WriteCharFromKeyCode = "Unassigned"
  Case 137: WriteCharFromKeyCode = "Unassigned"
  Case 138: WriteCharFromKeyCode = "Unassigned"
  Case 139: WriteCharFromKeyCode = "Unassigned"
  Case 140: WriteCharFromKeyCode = "Unassigned"
  Case 141: WriteCharFromKeyCode = "Unassigned"
  Case 142: WriteCharFromKeyCode = "Unassigned"
  Case 143: WriteCharFromKeyCode = "Unassigned"
  Case 144: WriteCharFromKeyCode = "NUMLOCK"
  Case 145: WriteCharFromKeyCode = "SCRLLOCK"
  Case 146: WriteCharFromKeyCode = "OEM specific"
  Case 147: WriteCharFromKeyCode = "OEM specific"
  Case 148: WriteCharFromKeyCode = "OEM specific"
  Case 149: WriteCharFromKeyCode = "OEM specific"
  Case 150: WriteCharFromKeyCode = "OEM specific"
  Case 151: WriteCharFromKeyCode = "Unassigned"
  Case 152: WriteCharFromKeyCode = "Unassigned"
  Case 153: WriteCharFromKeyCode = "Unassigned"
  Case 154: WriteCharFromKeyCode = "Unassigned"
  Case 155: WriteCharFromKeyCode = "Unassigned"
  Case 156: WriteCharFromKeyCode = "Unassigned"
  Case 157: WriteCharFromKeyCode = "Unassigned"
  Case 158: WriteCharFromKeyCode = "Unassigned"
  Case 159: WriteCharFromKeyCode = "Unassigned"
  Case 160: WriteCharFromKeyCode = "LSHIFT"
  Case 161: WriteCharFromKeyCode = "RSHIFT"
  Case 162: WriteCharFromKeyCode = "LCTRL"
  Case 163: WriteCharFromKeyCode = "RCTRL"
  Case 164: WriteCharFromKeyCode = "LALT"
  Case 165: WriteCharFromKeyCode = "RALT"
  Case 166: WriteCharFromKeyCode = "BACK"
  Case 167: WriteCharFromKeyCode = "FORWARD"
  Case 168: WriteCharFromKeyCode = "REFRESH"
  Case 169: WriteCharFromKeyCode = "STOP"
  Case 170: WriteCharFromKeyCode = "SEARCH"
  Case 171: WriteCharFromKeyCode = "FAVORITES"
  Case 172: WriteCharFromKeyCode = "HOME"
  Case 173: WriteCharFromKeyCode = "MUTE"
  Case 174: WriteCharFromKeyCode = "VOLDOWN"
  Case 175: WriteCharFromKeyCode = "VOLUP"
  Case 176: WriteCharFromKeyCode = "NEXT"
  Case 177: WriteCharFromKeyCode = "PREV"
  Case 178: WriteCharFromKeyCode = "STOP"
  Case 179: WriteCharFromKeyCode = "PLAY"
  Case 180: WriteCharFromKeyCode = "EMAIL"
  Case 181: WriteCharFromKeyCode = "MEDIA"
  Case 182: WriteCharFromKeyCode = "START1"
  Case 183: WriteCharFromKeyCode = "START2"
  Case 184: WriteCharFromKeyCode = "Reserved"
  Case 185: WriteCharFromKeyCode = "Reserved"
  Case 186: WriteCharFromKeyCode = ";"
  Case 187: WriteCharFromKeyCode = "="
  Case 188: WriteCharFromKeyCode = ","
  Case 189: WriteCharFromKeyCode = "-"
  Case 190: WriteCharFromKeyCode = "."
  Case 191: WriteCharFromKeyCode = "/"
  Case 192: WriteCharFromKeyCode = "`"
  Case 193: WriteCharFromKeyCode = "Reserved"
  Case 194: WriteCharFromKeyCode = "Reserved"
  Case 195: WriteCharFromKeyCode = "Reserved"
  Case 196: WriteCharFromKeyCode = "Reserved"
  Case 197: WriteCharFromKeyCode = "Reserved"
  Case 198: WriteCharFromKeyCode = "Reserved"
  Case 199: WriteCharFromKeyCode = "Reserved"
  Case 200: WriteCharFromKeyCode = "Reserved"
  Case 201: WriteCharFromKeyCode = "Reserved"
  Case 202: WriteCharFromKeyCode = "Reserved"
  Case 203: WriteCharFromKeyCode = "Reserved"
  Case 204: WriteCharFromKeyCode = "Reserved"
  Case 205: WriteCharFromKeyCode = "Reserved"
  Case 206: WriteCharFromKeyCode = "Reserved"
  Case 207: WriteCharFromKeyCode = "Reserved"
  Case 208: WriteCharFromKeyCode = "Reserved"
  Case 209: WriteCharFromKeyCode = "Reserved"
  Case 210: WriteCharFromKeyCode = "Reserved"
  Case 211: WriteCharFromKeyCode = "Reserved"
  Case 212: WriteCharFromKeyCode = "Reserved"
  Case 213: WriteCharFromKeyCode = "Reserved"
  Case 214: WriteCharFromKeyCode = "Reserved"
  Case 215: WriteCharFromKeyCode = "Reserved"
  Case 216: WriteCharFromKeyCode = "Unassigned"
  Case 217: WriteCharFromKeyCode = "Unassigned"
  Case 218: WriteCharFromKeyCode = "Unassigned"
  Case 219: WriteCharFromKeyCode = "["
  Case 220: WriteCharFromKeyCode = "\"
  Case 221: WriteCharFromKeyCode = "]"
  Case 222: WriteCharFromKeyCode = "'"
  Case 223: WriteCharFromKeyCode = "MISC"
  Case 224: WriteCharFromKeyCode = "Reserved"
  Case 225: WriteCharFromKeyCode = "OEM"
  Case 226: WriteCharFromKeyCode = "OEM ANG"
  Case 227: WriteCharFromKeyCode = "OEM"
  Case 228: WriteCharFromKeyCode = "OEM"
  Case 229: WriteCharFromKeyCode = "PROCESS"
  Case 230: WriteCharFromKeyCode = "OEM"
  Case 231: WriteCharFromKeyCode = "UNICODE"
  Case 232: WriteCharFromKeyCode = "Unassigned"
  Case 233: WriteCharFromKeyCode = "OEM specific"
  Case 234: WriteCharFromKeyCode = "OEM specific"
  Case 235: WriteCharFromKeyCode = "OEM specific"
  Case 236: WriteCharFromKeyCode = "OEM specific"
  Case 237: WriteCharFromKeyCode = "OEM specific"
  Case 238: WriteCharFromKeyCode = "OEM specific"
  Case 239: WriteCharFromKeyCode = "OEM specific"
  Case 240: WriteCharFromKeyCode = "OEM specific"
  Case 241: WriteCharFromKeyCode = "OEM specific"
  Case 242: WriteCharFromKeyCode = "OEM specific"
  Case 243: WriteCharFromKeyCode = "OEM specific"
  Case 244: WriteCharFromKeyCode = "OEM specific"
  Case 245: WriteCharFromKeyCode = "OEM specific"
  Case 246: WriteCharFromKeyCode = "ATTN"
  Case 247: WriteCharFromKeyCode = "CRSEL"
  Case 248: WriteCharFromKeyCode = "EXSEL"
  Case 249: WriteCharFromKeyCode = "ERASE EOF"
  Case 250: WriteCharFromKeyCode = "PLAY"
  Case 251: WriteCharFromKeyCode = "ZOOM"
  Case 252: WriteCharFromKeyCode = "Reserved"
  Case 253: WriteCharFromKeyCode = "PA1"
  Case 254: WriteCharFromKeyCode = "CLEAR"
  Case 255: WriteCharFromKeyCode = "MISC"
  Case Else: WriteCharFromKeyCode = "UNKNOWN"
 End Select
 
End If

End Function

'4.) WriteCharFromKeyAscii() is a function that will take
'a keyascii value and will output it's respective character.
'It only takes one argument, the keyascii value (as an integer).
'This function will then return the corresponding character.
'In my opinion, this is much better than the built in Chr() function
'for two reasons.  One is that for the non-printable and extended ASCII
'set Chr() will output garbage, whereas this function will output a useful
'text string.  The second reason I like it better is because Chr() will crash
'if you pass it a number large than 255.  With this function, if you pass
'it a number larger than 255 it will just return "N/A"
Public Function WriteCharFromKeyAscii(KeyAscii As Integer) As String
 Select Case KeyAscii
  Case 0: WriteCharFromKeyAscii = "NULL"
  Case 1: WriteCharFromKeyAscii = "SOH"
  Case 2: WriteCharFromKeyAscii = "STX"
  Case 3: WriteCharFromKeyAscii = "ETX"
  Case 4: WriteCharFromKeyAscii = "EOT"
  Case 5: WriteCharFromKeyAscii = "ENQ"
  Case 6: WriteCharFromKeyAscii = "ACK"
  Case 7: WriteCharFromKeyAscii = "BEL"
  Case 8: WriteCharFromKeyAscii = "BACKSPACE"
  Case 9: WriteCharFromKeyAscii = "TAB"
  Case 10: WriteCharFromKeyAscii = "LF"
  Case 11: WriteCharFromKeyAscii = "VT"
  Case 12: WriteCharFromKeyAscii = "FF"
  Case 13: WriteCharFromKeyAscii = "RETURN"
  Case 14: WriteCharFromKeyAscii = "SO"
  Case 15: WriteCharFromKeyAscii = "SI"
  Case 16: WriteCharFromKeyAscii = "DLE"
  Case 17: WriteCharFromKeyAscii = "DC1"
  Case 18: WriteCharFromKeyAscii = "DC2"
  Case 19: WriteCharFromKeyAscii = "DC3"
  Case 20: WriteCharFromKeyAscii = "DC4"
  Case 21: WriteCharFromKeyAscii = "NAK"
  Case 22: WriteCharFromKeyAscii = "SYN"
  Case 23: WriteCharFromKeyAscii = "ETB"
  Case 24: WriteCharFromKeyAscii = "CANCEL"
  Case 25: WriteCharFromKeyAscii = "EM"
  Case 26: WriteCharFromKeyAscii = "SUB"
  Case 27: WriteCharFromKeyAscii = "ESC"
  Case 28: WriteCharFromKeyAscii = "FS"
  Case 29: WriteCharFromKeyAscii = "GS"
  Case 30: WriteCharFromKeyAscii = "RS"
  Case 31: WriteCharFromKeyAscii = "US"
  Case 32: WriteCharFromKeyAscii = "SPACE"
  Case 33: WriteCharFromKeyAscii = "!"
  Case 34: WriteCharFromKeyAscii = """"
  Case 35: WriteCharFromKeyAscii = "#"
  Case 36: WriteCharFromKeyAscii = "$"
  Case 37: WriteCharFromKeyAscii = "%"
  Case 38: WriteCharFromKeyAscii = "&"
  Case 39: WriteCharFromKeyAscii = "'"
  Case 40: WriteCharFromKeyAscii = "("
  Case 41: WriteCharFromKeyAscii = ")"
  Case 42: WriteCharFromKeyAscii = "*"
  Case 43: WriteCharFromKeyAscii = "+"
  Case 44: WriteCharFromKeyAscii = ","
  Case 45: WriteCharFromKeyAscii = "-"
  Case 46: WriteCharFromKeyAscii = "."
  Case 47: WriteCharFromKeyAscii = "/"
  Case 48: WriteCharFromKeyAscii = "0"
  Case 49: WriteCharFromKeyAscii = "1"
  Case 50: WriteCharFromKeyAscii = "2"
  Case 51: WriteCharFromKeyAscii = "3"
  Case 52: WriteCharFromKeyAscii = "4"
  Case 53: WriteCharFromKeyAscii = "5"
  Case 54: WriteCharFromKeyAscii = "6"
  Case 55: WriteCharFromKeyAscii = "7"
  Case 56: WriteCharFromKeyAscii = "8"
  Case 57: WriteCharFromKeyAscii = "9"
  Case 58: WriteCharFromKeyAscii = ":"
  Case 59: WriteCharFromKeyAscii = ";"
  Case 60: WriteCharFromKeyAscii = "<"
  Case 61: WriteCharFromKeyAscii = "="
  Case 62: WriteCharFromKeyAscii = ">"
  Case 63: WriteCharFromKeyAscii = "?"
  Case 64: WriteCharFromKeyAscii = "@"
  Case 65: WriteCharFromKeyAscii = "A"
  Case 66: WriteCharFromKeyAscii = "B"
  Case 67: WriteCharFromKeyAscii = "C"
  Case 68: WriteCharFromKeyAscii = "D"
  Case 69: WriteCharFromKeyAscii = "E"
  Case 70: WriteCharFromKeyAscii = "F"
  Case 71: WriteCharFromKeyAscii = "G"
  Case 72: WriteCharFromKeyAscii = "H"
  Case 73: WriteCharFromKeyAscii = "I"
  Case 74: WriteCharFromKeyAscii = "J"
  Case 75: WriteCharFromKeyAscii = "K"
  Case 76: WriteCharFromKeyAscii = "L"
  Case 77: WriteCharFromKeyAscii = "M"
  Case 78: WriteCharFromKeyAscii = "N"
  Case 79: WriteCharFromKeyAscii = "O"
  Case 80: WriteCharFromKeyAscii = "P"
  Case 81: WriteCharFromKeyAscii = "Q"
  Case 82: WriteCharFromKeyAscii = "R"
  Case 83: WriteCharFromKeyAscii = "S"
  Case 84: WriteCharFromKeyAscii = "T"
  Case 85: WriteCharFromKeyAscii = "U"
  Case 86: WriteCharFromKeyAscii = "V"
  Case 87: WriteCharFromKeyAscii = "W"
  Case 88: WriteCharFromKeyAscii = "X"
  Case 89: WriteCharFromKeyAscii = "Y"
  Case 90: WriteCharFromKeyAscii = "Z"
  Case 91: WriteCharFromKeyAscii = "["
  Case 92: WriteCharFromKeyAscii = "\"
  Case 93: WriteCharFromKeyAscii = "]"
  Case 94: WriteCharFromKeyAscii = "^"
  Case 95: WriteCharFromKeyAscii = "_"
  Case 96: WriteCharFromKeyAscii = "`"
  Case 97: WriteCharFromKeyAscii = "a"
  Case 98: WriteCharFromKeyAscii = "b"
  Case 99: WriteCharFromKeyAscii = "c"
  Case 100: WriteCharFromKeyAscii = "d"
  Case 101: WriteCharFromKeyAscii = "e"
  Case 102: WriteCharFromKeyAscii = "f"
  Case 103: WriteCharFromKeyAscii = "g"
  Case 104: WriteCharFromKeyAscii = "h"
  Case 105: WriteCharFromKeyAscii = "i"
  Case 106: WriteCharFromKeyAscii = "j"
  Case 107: WriteCharFromKeyAscii = "k"
  Case 108: WriteCharFromKeyAscii = "l"
  Case 109: WriteCharFromKeyAscii = "m"
  Case 110: WriteCharFromKeyAscii = "n"
  Case 111: WriteCharFromKeyAscii = "o"
  Case 112: WriteCharFromKeyAscii = "p"
  Case 113: WriteCharFromKeyAscii = "q"
  Case 114: WriteCharFromKeyAscii = "r"
  Case 115: WriteCharFromKeyAscii = "s"
  Case 116: WriteCharFromKeyAscii = "t"
  Case 117: WriteCharFromKeyAscii = "u"
  Case 118: WriteCharFromKeyAscii = "v"
  Case 119: WriteCharFromKeyAscii = "w"
  Case 120: WriteCharFromKeyAscii = "x"
  Case 121: WriteCharFromKeyAscii = "y"
  Case 122: WriteCharFromKeyAscii = "z"
  Case 123: WriteCharFromKeyAscii = "{"
  Case 124: WriteCharFromKeyAscii = "|"
  Case 125: WriteCharFromKeyAscii = "}"
  Case 126: WriteCharFromKeyAscii = "~"
  Case 127: WriteCharFromKeyAscii = "DELETE"
  Case 128: WriteCharFromKeyAscii = "€"
  Case 129: WriteCharFromKeyAscii = ""
  Case 130: WriteCharFromKeyAscii = ""
  Case 131: WriteCharFromKeyAscii = ""
  Case 132: WriteCharFromKeyAscii = ""
  Case 133: WriteCharFromKeyAscii = ""
  Case 134: WriteCharFromKeyAscii = ""
  Case 135: WriteCharFromKeyAscii = ""
  Case 136: WriteCharFromKeyAscii = ""
  Case 137: WriteCharFromKeyAscii = ""
  Case 138: WriteCharFromKeyAscii = ""
  Case 139: WriteCharFromKeyAscii = ""
  Case 140: WriteCharFromKeyAscii = ""
  Case 141: WriteCharFromKeyAscii = ""
  Case 142: WriteCharFromKeyAscii = ""
  Case 143: WriteCharFromKeyAscii = ""
  Case 144: WriteCharFromKeyAscii = ""
  Case 145: WriteCharFromKeyAscii = ""
  Case 146: WriteCharFromKeyAscii = ""
  Case 147: WriteCharFromKeyAscii = ""
  Case 148: WriteCharFromKeyAscii = ""
  Case 149: WriteCharFromKeyAscii = ""
  Case 150: WriteCharFromKeyAscii = ""
  Case 151: WriteCharFromKeyAscii = ""
  Case 152: WriteCharFromKeyAscii = ""
  Case 153: WriteCharFromKeyAscii = ""
  Case 154: WriteCharFromKeyAscii = ""
  Case 155: WriteCharFromKeyAscii = ""
  Case 156: WriteCharFromKeyAscii = ""
  Case 157: WriteCharFromKeyAscii = ""
  Case 158: WriteCharFromKeyAscii = ""
  Case 159: WriteCharFromKeyAscii = ""
  Case 160: WriteCharFromKeyAscii = ""
  Case 161: WriteCharFromKeyAscii = ""
  Case 162: WriteCharFromKeyAscii = ""
  Case 163: WriteCharFromKeyAscii = "£"
  Case 164: WriteCharFromKeyAscii = ""
  Case 165: WriteCharFromKeyAscii = "¥"
  Case 166: WriteCharFromKeyAscii = ""
  Case 167: WriteCharFromKeyAscii = ""
  Case 168: WriteCharFromKeyAscii = ""
  Case 169: WriteCharFromKeyAscii = ""
  Case 170: WriteCharFromKeyAscii = ""
  Case 171: WriteCharFromKeyAscii = ""
  Case 172: WriteCharFromKeyAscii = ""
  Case 173: WriteCharFromKeyAscii = ""
  Case 174: WriteCharFromKeyAscii = ""
  Case 175: WriteCharFromKeyAscii = ""
  Case 176: WriteCharFromKeyAscii = ""
  Case 177: WriteCharFromKeyAscii = ""
  Case 178: WriteCharFromKeyAscii = ""
  Case 179: WriteCharFromKeyAscii = ""
  Case 180: WriteCharFromKeyAscii = ""
  Case 181: WriteCharFromKeyAscii = ""
  Case 182: WriteCharFromKeyAscii = ""
  Case 183: WriteCharFromKeyAscii = ""
  Case 184: WriteCharFromKeyAscii = ""
  Case 185: WriteCharFromKeyAscii = ""
  Case 186: WriteCharFromKeyAscii = ""
  Case 187: WriteCharFromKeyAscii = ""
  Case 188: WriteCharFromKeyAscii = ""
  Case 189: WriteCharFromKeyAscii = ""
  Case 190: WriteCharFromKeyAscii = ""
  Case 191: WriteCharFromKeyAscii = ""
  Case 192: WriteCharFromKeyAscii = ""
  Case 193: WriteCharFromKeyAscii = ""
  Case 194: WriteCharFromKeyAscii = ""
  Case 195: WriteCharFromKeyAscii = ""
  Case 196: WriteCharFromKeyAscii = ""
  Case 197: WriteCharFromKeyAscii = ""
  Case 198: WriteCharFromKeyAscii = ""
  Case 199: WriteCharFromKeyAscii = ""
  Case 200: WriteCharFromKeyAscii = ""
  Case 201: WriteCharFromKeyAscii = ""
  Case 202: WriteCharFromKeyAscii = ""
  Case 203: WriteCharFromKeyAscii = ""
  Case 204: WriteCharFromKeyAscii = ""
  Case 205: WriteCharFromKeyAscii = ""
  Case 206: WriteCharFromKeyAscii = ""
  Case 207: WriteCharFromKeyAscii = ""
  Case 208: WriteCharFromKeyAscii = ""
  Case 209: WriteCharFromKeyAscii = ""
  Case 210: WriteCharFromKeyAscii = ""
  Case 211: WriteCharFromKeyAscii = ""
  Case 212: WriteCharFromKeyAscii = ""
  Case 213: WriteCharFromKeyAscii = ""
  Case 214: WriteCharFromKeyAscii = ""
  Case 215: WriteCharFromKeyAscii = ""
  Case 216: WriteCharFromKeyAscii = ""
  Case 217: WriteCharFromKeyAscii = ""
  Case 218: WriteCharFromKeyAscii = ""
  Case 219: WriteCharFromKeyAscii = ""
  Case 220: WriteCharFromKeyAscii = ""
  Case 221: WriteCharFromKeyAscii = ""
  Case 222: WriteCharFromKeyAscii = ""
  Case 223: WriteCharFromKeyAscii = ""
  Case 224: WriteCharFromKeyAscii = ""
  Case 225: WriteCharFromKeyAscii = ""
  Case 226: WriteCharFromKeyAscii = ""
  Case 227: WriteCharFromKeyAscii = ""
  Case 228: WriteCharFromKeyAscii = ""
  Case 229: WriteCharFromKeyAscii = ""
  Case 230: WriteCharFromKeyAscii = ""
  Case 231: WriteCharFromKeyAscii = ""
  Case 232: WriteCharFromKeyAscii = ""
  Case 233: WriteCharFromKeyAscii = ""
  Case 234: WriteCharFromKeyAscii = ""
  Case 235: WriteCharFromKeyAscii = ""
  Case 236: WriteCharFromKeyAscii = ""
  Case 237: WriteCharFromKeyAscii = ""
  Case 238: WriteCharFromKeyAscii = ""
  Case 239: WriteCharFromKeyAscii = ""
  Case 240: WriteCharFromKeyAscii = ""
  Case 241: WriteCharFromKeyAscii = ""
  Case 242: WriteCharFromKeyAscii = ""
  Case 243: WriteCharFromKeyAscii = ""
  Case 244: WriteCharFromKeyAscii = ""
  Case 245: WriteCharFromKeyAscii = ""
  Case 246: WriteCharFromKeyAscii = ""
  Case 247: WriteCharFromKeyAscii = ""
  Case 248: WriteCharFromKeyAscii = ""
  Case 249: WriteCharFromKeyAscii = ""
  Case 250: WriteCharFromKeyAscii = ""
  Case 251: WriteCharFromKeyAscii = ""
  Case 252: WriteCharFromKeyAscii = ""
  Case 253: WriteCharFromKeyAscii = ""
  Case 254: WriteCharFromKeyAscii = ""
  Case 255: WriteCharFromKeyAscii = ""
  Case Else: WriteCharFromKeyAscii = "N/A"
 End Select
End Function

'5.) WriteKeyAsciiFromKeyCode() is a function that will take
'a keycode value and will output it's equivalent keyascii value.
'It takes two arguments, one is the keycode number itself and the
'other is a boolean value called shiftdown.  If the SHIFT key is being
'held down you would say true, and if it's not you would say false.
'It will return "N/A" if there is no equivalent KeyAscii value.
Public Function WriteKeyAsciiFromKeyCode(KeyCode As Integer, shiftdown As Boolean) As String
If shiftdown = True Then 'shift is down
Select Case KeyCode
 Case 8: WriteKeyAsciiFromKeyCode = "8"
 Case 9: WriteKeyAsciiFromKeyCode = "9"
 Case 10: WriteKeyAsciiFromKeyCode = "10"
 Case 13: WriteKeyAsciiFromKeyCode = "13"
 Case 27: WriteKeyAsciiFromKeyCode = "27"
 Case 32: WriteKeyAsciiFromKeyCode = "32"
 'Case 46: WriteKeyAsciiFromKeyCode = "127" 'these are really not the same
 Case 48: WriteKeyAsciiFromKeyCode = "41" 'shift relavent 0/) 48/41
 Case 49: WriteKeyAsciiFromKeyCode = "33" 'shift relavent 1/! 49/33
 Case 50: WriteKeyAsciiFromKeyCode = "64" 'shift relavent 2/@ 50/64
 Case 51: WriteKeyAsciiFromKeyCode = "35" 'shift relavent 3/# 51/35
 Case 52: WriteKeyAsciiFromKeyCode = "36" 'shift relavent 4/$ 52/36
 Case 53: WriteKeyAsciiFromKeyCode = "37" 'shift relavent 5/% 53/37
 Case 54: WriteKeyAsciiFromKeyCode = "94" 'shift relavent 6/^ 54/94
 Case 55: WriteKeyAsciiFromKeyCode = "38" 'shift relavent 7/& 55/38
 Case 56: WriteKeyAsciiFromKeyCode = "42" 'shift relavent 8/* 56/42
 Case 57: WriteKeyAsciiFromKeyCode = "40" 'shift relavent 9/( 57/40
 Case 65: WriteKeyAsciiFromKeyCode = "65" 'shift relavent a/A 97/65
 Case 66: WriteKeyAsciiFromKeyCode = "66" 'shift relavent b/B 98/66
 Case 67: WriteKeyAsciiFromKeyCode = "67" 'shift relavent c/C 99/67
 Case 68: WriteKeyAsciiFromKeyCode = "68" 'shift relavent d/D 100/68
 Case 69: WriteKeyAsciiFromKeyCode = "69" 'shift relavent e/E 101/69
 Case 70: WriteKeyAsciiFromKeyCode = "70" 'shift relavent f/F 102/70
 Case 71: WriteKeyAsciiFromKeyCode = "71" 'shift relavent g/G 103/71
 Case 72: WriteKeyAsciiFromKeyCode = "72" 'shift relavent h/H 104/72
 Case 73: WriteKeyAsciiFromKeyCode = "73" 'shift relavent i/I 105/73
 Case 74: WriteKeyAsciiFromKeyCode = "74" 'shift relavent j/J 106/74
 Case 75: WriteKeyAsciiFromKeyCode = "75" 'shift relavent k/K 107/75
 Case 76: WriteKeyAsciiFromKeyCode = "76" 'shift relavent l/L 108/76
 Case 77: WriteKeyAsciiFromKeyCode = "77" 'shift relavent m/M 109/77
 Case 78: WriteKeyAsciiFromKeyCode = "78" 'shift relavent n/N 110/78
 Case 79: WriteKeyAsciiFromKeyCode = "79" 'shift relavent o/O 111/79
 Case 80: WriteKeyAsciiFromKeyCode = "80" 'shift relavent p/P 112/80
 Case 81: WriteKeyAsciiFromKeyCode = "81" 'shift relavent q/Q 113/81
 Case 82: WriteKeyAsciiFromKeyCode = "82" 'shift relavent r/R 114/82
 Case 83: WriteKeyAsciiFromKeyCode = "83" 'shift relavent s/S 115/83
 Case 84: WriteKeyAsciiFromKeyCode = "84" 'shift relavent t/T 116/84
 Case 85: WriteKeyAsciiFromKeyCode = "85" 'shift relavent u/U 117/85
 Case 86: WriteKeyAsciiFromKeyCode = "86" 'shift relavent v/V 118/86
 Case 87: WriteKeyAsciiFromKeyCode = "87" 'shift relavent w/W 119/87
 Case 88: WriteKeyAsciiFromKeyCode = "88" 'shift relavent x/X 120/88
 Case 89: WriteKeyAsciiFromKeyCode = "89" 'shift relavent y/Y 121/89
 Case 90: WriteKeyAsciiFromKeyCode = "90" 'shift relavent z/Z 122/90
 Case 96: WriteKeyAsciiFromKeyCode = "48" '0 on number pad
 Case 97: WriteKeyAsciiFromKeyCode = "49" '1 on number pad
 Case 98: WriteKeyAsciiFromKeyCode = "50" '2 on number pad
 Case 99: WriteKeyAsciiFromKeyCode = "51" '3 on number pad
 Case 100: WriteKeyAsciiFromKeyCode = "52" '4 on number pad
 Case 101: WriteKeyAsciiFromKeyCode = "53" '5 on number pad
 Case 102: WriteKeyAsciiFromKeyCode = "54" '6 on number pad
 Case 103: WriteKeyAsciiFromKeyCode = "55" '7 on number pad
 Case 104: WriteKeyAsciiFromKeyCode = "56" '8 on number pad
 Case 105: WriteKeyAsciiFromKeyCode = "57" '9 on number pad
 Case 106: WriteKeyAsciiFromKeyCode = "42" '* on number pad
 Case 107: WriteKeyAsciiFromKeyCode = "43" '+ on number pad
 Case 109: WriteKeyAsciiFromKeyCode = "45" '- on number pad
 Case 110: WriteKeyAsciiFromKeyCode = "46" '. on number pad
 Case 111: WriteKeyAsciiFromKeyCode = "47" '/ on number pad
 Case 186: WriteKeyAsciiFromKeyCode = "58" 'shift relavent ;/: 59/58
 Case 187: WriteKeyAsciiFromKeyCode = "43" 'shift relavent =/+ 61/43
 Case 188: WriteKeyAsciiFromKeyCode = "60" 'shift relavent ,/< 44/60
 Case 189: WriteKeyAsciiFromKeyCode = "95" 'shift relavent -/_ 45/95
 Case 190: WriteKeyAsciiFromKeyCode = "62" 'shift relavent ./> 46/62
 Case 191: WriteKeyAsciiFromKeyCode = "63" 'shift relavent //? 47/63
 Case 192: WriteKeyAsciiFromKeyCode = "126" 'shift relavent `/~ 96/126
 Case 219: WriteKeyAsciiFromKeyCode = "123" 'shift relavent [/{ 91/123
 Case 220: WriteKeyAsciiFromKeyCode = "124" 'shift relavent \/| 92/124
 Case 221: WriteKeyAsciiFromKeyCode = "125" 'shift relavent ]/} 93/125
 Case 222: WriteKeyAsciiFromKeyCode = "34" 'shift relavent '/" 39/34
 Case Else: WriteKeyAsciiFromKeyCode = "N/A"
End Select
Else 'shift is not down
Select Case KeyCode
 Case 8: WriteKeyAsciiFromKeyCode = "8"
 Case 9: WriteKeyAsciiFromKeyCode = "9"
 Case 10: WriteKeyAsciiFromKeyCode = "10"
 Case 13: WriteKeyAsciiFromKeyCode = "13"
 Case 27: WriteKeyAsciiFromKeyCode = "27"
 Case 32: WriteKeyAsciiFromKeyCode = "32"
 'Case 46: WriteKeyAsciiFromKeyCode = "127" 'these are really not the same
 Case 48: WriteKeyAsciiFromKeyCode = "48" 'shift relavent 0/) 48/41
 Case 49: WriteKeyAsciiFromKeyCode = "49" 'shift relavent 1/! 49/33
 Case 50: WriteKeyAsciiFromKeyCode = "50" 'shift relavent 2/@ 50/64
 Case 51: WriteKeyAsciiFromKeyCode = "51" 'shift relavent 3/# 51/35
 Case 52: WriteKeyAsciiFromKeyCode = "52" 'shift relavent 4/$ 52/36
 Case 53: WriteKeyAsciiFromKeyCode = "53" 'shift relavent 5/% 53/37
 Case 54: WriteKeyAsciiFromKeyCode = "54" 'shift relavent 6/^ 54/94
 Case 55: WriteKeyAsciiFromKeyCode = "55" 'shift relavent 7/& 55/38
 Case 56: WriteKeyAsciiFromKeyCode = "56" 'shift relavent 8/* 56/42
 Case 57: WriteKeyAsciiFromKeyCode = "57" 'shift relavent 9/( 57/40
 Case 65: WriteKeyAsciiFromKeyCode = "97" 'shift relavent a/A 97/65
 Case 66: WriteKeyAsciiFromKeyCode = "98" 'shift relavent b/B 98/66
 Case 67: WriteKeyAsciiFromKeyCode = "99" 'shift relavent c/C 99/67
 Case 68: WriteKeyAsciiFromKeyCode = "100" 'shift relavent d/D 100/68
 Case 69: WriteKeyAsciiFromKeyCode = "101" 'shift relavent e/E 101/69
 Case 70: WriteKeyAsciiFromKeyCode = "102" 'shift relavent f/F 102/70
 Case 71: WriteKeyAsciiFromKeyCode = "103" 'shift relavent g/G 103/71
 Case 72: WriteKeyAsciiFromKeyCode = "104" 'shift relavent h/H 104/72
 Case 73: WriteKeyAsciiFromKeyCode = "105" 'shift relavent i/I 105/73
 Case 74: WriteKeyAsciiFromKeyCode = "106" 'shift relavent j/J 106/74
 Case 75: WriteKeyAsciiFromKeyCode = "107" 'shift relavent k/K 107/75
 Case 76: WriteKeyAsciiFromKeyCode = "108" 'shift relavent l/L 108/76
 Case 77: WriteKeyAsciiFromKeyCode = "109" 'shift relavent m/M 109/77
 Case 78: WriteKeyAsciiFromKeyCode = "110" 'shift relavent n/N 110/78
 Case 79: WriteKeyAsciiFromKeyCode = "111" 'shift relavent o/O 111/79
 Case 80: WriteKeyAsciiFromKeyCode = "112" 'shift relavent p/P 112/80
 Case 81: WriteKeyAsciiFromKeyCode = "113" 'shift relavent q/Q 113/81
 Case 82: WriteKeyAsciiFromKeyCode = "114" 'shift relavent r/R 114/82
 Case 83: WriteKeyAsciiFromKeyCode = "115" 'shift relavent s/S 115/83
 Case 84: WriteKeyAsciiFromKeyCode = "116" 'shift relavent t/T 116/84
 Case 85: WriteKeyAsciiFromKeyCode = "117" 'shift relavent u/U 117/85
 Case 86: WriteKeyAsciiFromKeyCode = "118" 'shift relavent v/V 118/86
 Case 87: WriteKeyAsciiFromKeyCode = "119" 'shift relavent w/W 119/87
 Case 88: WriteKeyAsciiFromKeyCode = "120" 'shift relavent x/X 120/88
 Case 89: WriteKeyAsciiFromKeyCode = "121" 'shift relavent y/Y 121/89
 Case 90: WriteKeyAsciiFromKeyCode = "122" 'shift relavent z/Z 122/90
 Case 96: WriteKeyAsciiFromKeyCode = "48" '0 on number pad
 Case 97: WriteKeyAsciiFromKeyCode = "49" '1 on number pad
 Case 98: WriteKeyAsciiFromKeyCode = "50" '2 on number pad
 Case 99: WriteKeyAsciiFromKeyCode = "51" '3 on number pad
 Case 100: WriteKeyAsciiFromKeyCode = "52" '4 on number pad
 Case 101: WriteKeyAsciiFromKeyCode = "53" '5 on number pad
 Case 102: WriteKeyAsciiFromKeyCode = "54" '6 on number pad
 Case 103: WriteKeyAsciiFromKeyCode = "55" '7 on number pad
 Case 104: WriteKeyAsciiFromKeyCode = "56" '8 on number pad
 Case 105: WriteKeyAsciiFromKeyCode = "57" '9 on number pad
 Case 106: WriteKeyAsciiFromKeyCode = "42" '* on number pad
 Case 107: WriteKeyAsciiFromKeyCode = "43" '+ on number pad
 Case 109: WriteKeyAsciiFromKeyCode = "45" '- on number pad
 Case 110: WriteKeyAsciiFromKeyCode = "46" '. on number pad
 Case 111: WriteKeyAsciiFromKeyCode = "47" '/ on number pad
 Case 186: WriteKeyAsciiFromKeyCode = "59" 'shift relavent ;/: 59/58
 Case 187: WriteKeyAsciiFromKeyCode = "61" 'shift relavent =/+ 61/43
 Case 188: WriteKeyAsciiFromKeyCode = "44" 'shift relavent ,/< 44/60
 Case 189: WriteKeyAsciiFromKeyCode = "45" 'shift relavent -/_ 45/95
 Case 190: WriteKeyAsciiFromKeyCode = "46" 'shift relavent ./> 46/62
 Case 191: WriteKeyAsciiFromKeyCode = "47" 'shift relavent //? 47/63
 Case 192: WriteKeyAsciiFromKeyCode = "96" 'shift relavent `/~ 96/126
 Case 219: WriteKeyAsciiFromKeyCode = "91" 'shift relavent [/{ 91/123
 Case 220: WriteKeyAsciiFromKeyCode = "92" 'shift relavent \/| 92/124
 Case 221: WriteKeyAsciiFromKeyCode = "93" 'shift relavent ]/} 93/125
 Case 222: WriteKeyAsciiFromKeyCode = "39" 'shift relavent '/" 39/34
 Case Else: WriteKeyAsciiFromKeyCode = "N/A"
End Select
End If

End Function

'6.) WriteKeyCodeFromKeyAscii() is a function that will take
'a KeyAscii value and will output it's equivalent KeyCode value.
'It only takes one argument which is the KeyAscii value as an integer.
'It will return "N/A" if there is no equivalent KeyCode value.
Public Function WriteKeyCodeFromKeyAscii(KeyAscii As Integer) As String
Select Case KeyAscii
 Case 8: WriteKeyCodeFromKeyAscii = "8"
 Case 9: WriteKeyCodeFromKeyAscii = "9"
 Case 10: WriteKeyCodeFromKeyAscii = "10"
 Case 13: WriteKeyCodeFromKeyAscii = "13"
 Case 27: WriteKeyCodeFromKeyAscii = "27"
 Case 32: WriteKeyCodeFromKeyAscii = "32"
 Case 33: WriteKeyCodeFromKeyAscii = "49"
 Case 34: WriteKeyCodeFromKeyAscii = "222"
 Case 35: WriteKeyCodeFromKeyAscii = "51"
 Case 36: WriteKeyCodeFromKeyAscii = "52"
 Case 37: WriteKeyCodeFromKeyAscii = "53"
 Case 38: WriteKeyCodeFromKeyAscii = "55"
 Case 39: WriteKeyCodeFromKeyAscii = "222"
 Case 40: WriteKeyCodeFromKeyAscii = "57"
 Case 41: WriteKeyCodeFromKeyAscii = "48"
 Case 42: WriteKeyCodeFromKeyAscii = "56" '* could be 106 on number-pad
 Case 43: WriteKeyCodeFromKeyAscii = "187" '+ could be 107 on number-pad
 Case 44: WriteKeyCodeFromKeyAscii = "188"
 Case 45: WriteKeyCodeFromKeyAscii = "189"
 Case 46: WriteKeyCodeFromKeyAscii = "190" '. could be 110 on number-pad
 Case 47: WriteKeyCodeFromKeyAscii = "191" '/ could be 111 on number-pad
 Case 48: WriteKeyCodeFromKeyAscii = "48" '0 could be 96 on number-pad
 Case 49: WriteKeyCodeFromKeyAscii = "49" '1 could be 97 on number-pad
 Case 50: WriteKeyCodeFromKeyAscii = "50" '2 could be 98 on number-pad
 Case 51: WriteKeyCodeFromKeyAscii = "51" '3 could be 99 on number-pad
 Case 52: WriteKeyCodeFromKeyAscii = "52" '4 could be 100 on number-pad
 Case 53: WriteKeyCodeFromKeyAscii = "53" '5 could be 101 on number-pad
 Case 54: WriteKeyCodeFromKeyAscii = "54" '6 could be 102 on number-pad
 Case 55: WriteKeyCodeFromKeyAscii = "55" '7 could be 103 on number-pad
 Case 56: WriteKeyCodeFromKeyAscii = "56" '8 could be 104 on number-pad
 Case 57: WriteKeyCodeFromKeyAscii = "57" '9 could be 105 on number-pad
 Case 58: WriteKeyCodeFromKeyAscii = "186"
 Case 59: WriteKeyCodeFromKeyAscii = "186"
 Case 60: WriteKeyCodeFromKeyAscii = "188"
 Case 61: WriteKeyCodeFromKeyAscii = "187"
 Case 62: WriteKeyCodeFromKeyAscii = "190"
 Case 63: WriteKeyCodeFromKeyAscii = "191"
 Case 64: WriteKeyCodeFromKeyAscii = "50"
 Case 65: WriteKeyCodeFromKeyAscii = "65"
 Case 66: WriteKeyCodeFromKeyAscii = "66"
 Case 67: WriteKeyCodeFromKeyAscii = "67"
 Case 68: WriteKeyCodeFromKeyAscii = "68"
 Case 69: WriteKeyCodeFromKeyAscii = "69"
 Case 70: WriteKeyCodeFromKeyAscii = "70"
 Case 71: WriteKeyCodeFromKeyAscii = "71"
 Case 72: WriteKeyCodeFromKeyAscii = "72"
 Case 73: WriteKeyCodeFromKeyAscii = "73"
 Case 74: WriteKeyCodeFromKeyAscii = "74"
 Case 75: WriteKeyCodeFromKeyAscii = "75"
 Case 76: WriteKeyCodeFromKeyAscii = "76"
 Case 77: WriteKeyCodeFromKeyAscii = "77"
 Case 78: WriteKeyCodeFromKeyAscii = "78"
 Case 79: WriteKeyCodeFromKeyAscii = "79"
 Case 80: WriteKeyCodeFromKeyAscii = "80"
 Case 81: WriteKeyCodeFromKeyAscii = "81"
 Case 82: WriteKeyCodeFromKeyAscii = "82"
 Case 83: WriteKeyCodeFromKeyAscii = "83"
 Case 84: WriteKeyCodeFromKeyAscii = "84"
 Case 85: WriteKeyCodeFromKeyAscii = "85"
 Case 86: WriteKeyCodeFromKeyAscii = "86"
 Case 87: WriteKeyCodeFromKeyAscii = "87"
 Case 88: WriteKeyCodeFromKeyAscii = "88"
 Case 89: WriteKeyCodeFromKeyAscii = "89"
 Case 90: WriteKeyCodeFromKeyAscii = "90"
 Case 91: WriteKeyCodeFromKeyAscii = "219"
 Case 92: WriteKeyCodeFromKeyAscii = "220"
 Case 93: WriteKeyCodeFromKeyAscii = "221"
 Case 94: WriteKeyCodeFromKeyAscii = "54"
 Case 95: WriteKeyCodeFromKeyAscii = "189"
 Case 96: WriteKeyCodeFromKeyAscii = "192"
 Case 97: WriteKeyCodeFromKeyAscii = "65"
 Case 98: WriteKeyCodeFromKeyAscii = "66"
 Case 99: WriteKeyCodeFromKeyAscii = "67"
 Case 100: WriteKeyCodeFromKeyAscii = "68"
 Case 101: WriteKeyCodeFromKeyAscii = "69"
 Case 102: WriteKeyCodeFromKeyAscii = "70"
 Case 103: WriteKeyCodeFromKeyAscii = "71"
 Case 104: WriteKeyCodeFromKeyAscii = "72"
 Case 105: WriteKeyCodeFromKeyAscii = "73"
 Case 106: WriteKeyCodeFromKeyAscii = "74"
 Case 107: WriteKeyCodeFromKeyAscii = "75"
 Case 108: WriteKeyCodeFromKeyAscii = "76"
 Case 109: WriteKeyCodeFromKeyAscii = "77"
 Case 110: WriteKeyCodeFromKeyAscii = "78"
 Case 111: WriteKeyCodeFromKeyAscii = "79"
 Case 112: WriteKeyCodeFromKeyAscii = "80"
 Case 113: WriteKeyCodeFromKeyAscii = "81"
 Case 114: WriteKeyCodeFromKeyAscii = "82"
 Case 115: WriteKeyCodeFromKeyAscii = "83"
 Case 116: WriteKeyCodeFromKeyAscii = "84"
 Case 117: WriteKeyCodeFromKeyAscii = "85"
 Case 118: WriteKeyCodeFromKeyAscii = "86"
 Case 119: WriteKeyCodeFromKeyAscii = "87"
 Case 120: WriteKeyCodeFromKeyAscii = "88"
 Case 121: WriteKeyCodeFromKeyAscii = "89"
 Case 122: WriteKeyCodeFromKeyAscii = "90"
 Case 123: WriteKeyCodeFromKeyAscii = "219"
 Case 124: WriteKeyCodeFromKeyAscii = "220"
 Case 125: WriteKeyCodeFromKeyAscii = "221"
 Case 126: WriteKeyCodeFromKeyAscii = "192"
 Case Else: WriteKeyCodeFromKeyAscii = "N/A"
End Select
End Function

'7.) WriteKeyAsciiFromChar() is a function that will take
'a character and will output it's equivalent KeyAscii value.
'It only takes one argument which is the character itself as a string.
'It will return "666" if it can't find an approriate KeyAscii value.
Public Function WriteKeyAsciiFromChar(someChar As String) As Integer
If someChar = " " Then
 WriteKeyAsciiFromChar = 32
 Exit Function
End If
someChar = Trim(someChar)
If UCase(someChar) = "NULL" Or UCase(someChar) = "NUL" Then
 WriteKeyAsciiFromChar = 0
ElseIf UCase(someChar) = "SOH" Then
 WriteKeyAsciiFromChar = 1
ElseIf UCase(someChar) = "STX" Then
 WriteKeyAsciiFromChar = 2
ElseIf UCase(someChar) = "ETX" Then
 WriteKeyAsciiFromChar = 3
ElseIf UCase(someChar) = "EOT" Then
 WriteKeyAsciiFromChar = 4
ElseIf UCase(someChar) = "ENQ" Then
 WriteKeyAsciiFromChar = 5
ElseIf UCase(someChar) = "ACK" Then
 WriteKeyAsciiFromChar = 6
ElseIf UCase(someChar) = "BEL" Or UCase(someChar) = "BELL" Then
 WriteKeyAsciiFromChar = 7
ElseIf UCase(someChar) = "BACKSPACE" Or UCase(someChar) = "BS" Then
 WriteKeyAsciiFromChar = 8
ElseIf UCase(someChar) = "TAB" Then
 WriteKeyAsciiFromChar = 9
ElseIf UCase(someChar) = "LF" Then
 WriteKeyAsciiFromChar = 10
ElseIf UCase(someChar) = "VT" Then
 WriteKeyAsciiFromChar = 11
ElseIf UCase(someChar) = "FF" Then
 WriteKeyAsciiFromChar = 12
ElseIf UCase(someChar) = "ENTER" Or UCase(someChar) = "RETURN" Or UCase(someChar) = "CR" Or UCase(someChar) = "RET" Or UCase(someChar) = "ENT" Then
 WriteKeyAsciiFromChar = 13
ElseIf UCase(someChar) = "SO" Then
 WriteKeyAsciiFromChar = 14
ElseIf UCase(someChar) = "SI" Then
 WriteKeyAsciiFromChar = 15
ElseIf UCase(someChar) = "DLE" Then
 WriteKeyAsciiFromChar = 16
ElseIf UCase(someChar) = "DC1" Then
 WriteKeyAsciiFromChar = 17
ElseIf UCase(someChar) = "DC2" Then
 WriteKeyAsciiFromChar = 18
ElseIf UCase(someChar) = "DC3" Then
 WriteKeyAsciiFromChar = 19
ElseIf UCase(someChar) = "DC4" Then
 WriteKeyAsciiFromChar = 20
ElseIf UCase(someChar) = "NAK" Then
 WriteKeyAsciiFromChar = 21
ElseIf UCase(someChar) = "SYN" Then
 WriteKeyAsciiFromChar = 22
ElseIf UCase(someChar) = "ETB" Then
 WriteKeyAsciiFromChar = 23
ElseIf UCase(someChar) = "CAN" Or someChar = "CANCEL" Then
 WriteKeyAsciiFromChar = 24
ElseIf UCase(someChar) = "EM" Then
 WriteKeyAsciiFromChar = 25
ElseIf UCase(someChar) = "SUB" Then
 WriteKeyAsciiFromChar = 26
ElseIf UCase(someChar) = "ESC" Or UCase(someChar) = "ESCAPE" Then
 WriteKeyAsciiFromChar = 27
ElseIf UCase(someChar) = "FS" Then
 WriteKeyAsciiFromChar = 28
ElseIf UCase(someChar) = "GS" Then
 WriteKeyAsciiFromChar = 29
ElseIf UCase(someChar) = "RS" Then
 WriteKeyAsciiFromChar = 30
ElseIf UCase(someChar) = "US" Then
 WriteKeyAsciiFromChar = 31
ElseIf UCase(someChar) = "SPACE" Or UCase(someChar) = "SP" Then
 WriteKeyAsciiFromChar = 32
ElseIf someChar = "!" Then
 WriteKeyAsciiFromChar = 33
ElseIf someChar = """" Then
 WriteKeyAsciiFromChar = 34
ElseIf someChar = "#" Then
 WriteKeyAsciiFromChar = 35
ElseIf someChar = "$" Then
 WriteKeyAsciiFromChar = 36
ElseIf someChar = "%" Then
 WriteKeyAsciiFromChar = 37
ElseIf someChar = "&" Then
 WriteKeyAsciiFromChar = 38
ElseIf someChar = "'" Then
 WriteKeyAsciiFromChar = 39
ElseIf someChar = "(" Then
 WriteKeyAsciiFromChar = 40
ElseIf someChar = ")" Then
 WriteKeyAsciiFromChar = 41
ElseIf someChar = "*" Then
 WriteKeyAsciiFromChar = 42
ElseIf someChar = "+" Then
 WriteKeyAsciiFromChar = 43
ElseIf someChar = "," Then
 WriteKeyAsciiFromChar = 44
ElseIf someChar = "-" Then
 WriteKeyAsciiFromChar = 45
ElseIf someChar = "." Then
 WriteKeyAsciiFromChar = 46
ElseIf someChar = "/" Then
 WriteKeyAsciiFromChar = 47
ElseIf someChar = "0" Then
 WriteKeyAsciiFromChar = 48
ElseIf someChar = "1" Then
 WriteKeyAsciiFromChar = 49
ElseIf someChar = "2" Then
 WriteKeyAsciiFromChar = 50
ElseIf someChar = "3" Then
 WriteKeyAsciiFromChar = 51
ElseIf someChar = "4" Then
 WriteKeyAsciiFromChar = 52
ElseIf someChar = "5" Then
 WriteKeyAsciiFromChar = 53
ElseIf someChar = "6" Then
 WriteKeyAsciiFromChar = 54
ElseIf someChar = "7" Then
 WriteKeyAsciiFromChar = 55
ElseIf someChar = "8" Then
 WriteKeyAsciiFromChar = 56
ElseIf someChar = "9" Then
 WriteKeyAsciiFromChar = 57
ElseIf someChar = ":" Then
 WriteKeyAsciiFromChar = 58
ElseIf someChar = ";" Then
 WriteKeyAsciiFromChar = 59
ElseIf someChar = "<" Then
 WriteKeyAsciiFromChar = 60
ElseIf someChar = "=" Then
 WriteKeyAsciiFromChar = 61
ElseIf someChar = ">" Then
 WriteKeyAsciiFromChar = 62
ElseIf someChar = "?" Then
 WriteKeyAsciiFromChar = 63
ElseIf someChar = "@" Then
 WriteKeyAsciiFromChar = 64
ElseIf someChar = "A" Then
 WriteKeyAsciiFromChar = 65
ElseIf someChar = "B" Then
 WriteKeyAsciiFromChar = 66
ElseIf someChar = "C" Then
 WriteKeyAsciiFromChar = 67
ElseIf someChar = "D" Then
 WriteKeyAsciiFromChar = 68
ElseIf someChar = "E" Then
 WriteKeyAsciiFromChar = 69
ElseIf someChar = "F" Then
 WriteKeyAsciiFromChar = 70
ElseIf someChar = "G" Then
 WriteKeyAsciiFromChar = 71
ElseIf someChar = "H" Then
 WriteKeyAsciiFromChar = 72
ElseIf someChar = "I" Then
 WriteKeyAsciiFromChar = 73
ElseIf someChar = "J" Then
 WriteKeyAsciiFromChar = 74
ElseIf someChar = "K" Then
 WriteKeyAsciiFromChar = 75
ElseIf someChar = "L" Then
 WriteKeyAsciiFromChar = 76
ElseIf someChar = "M" Then
 WriteKeyAsciiFromChar = 77
ElseIf someChar = "N" Then
 WriteKeyAsciiFromChar = 78
ElseIf someChar = "O" Then
 WriteKeyAsciiFromChar = 79
ElseIf someChar = "P" Then
 WriteKeyAsciiFromChar = 80
ElseIf someChar = "Q" Then
 WriteKeyAsciiFromChar = 81
ElseIf someChar = "R" Then
 WriteKeyAsciiFromChar = 82
ElseIf someChar = "S" Then
 WriteKeyAsciiFromChar = 83
ElseIf someChar = "T" Then
 WriteKeyAsciiFromChar = 84
ElseIf someChar = "U" Then
 WriteKeyAsciiFromChar = 85
ElseIf someChar = "V" Then
 WriteKeyAsciiFromChar = 86
ElseIf someChar = "W" Then
 WriteKeyAsciiFromChar = 87
ElseIf someChar = "X" Then
 WriteKeyAsciiFromChar = 88
ElseIf someChar = "Y" Then
 WriteKeyAsciiFromChar = 89
ElseIf someChar = "Z" Then
 WriteKeyAsciiFromChar = 90
ElseIf someChar = "[" Then
 WriteKeyAsciiFromChar = 91
ElseIf someChar = "\" Then
 WriteKeyAsciiFromChar = 92
ElseIf someChar = "]" Then
 WriteKeyAsciiFromChar = 93
ElseIf someChar = "^" Then
 WriteKeyAsciiFromChar = 94
ElseIf someChar = "_" Then
 WriteKeyAsciiFromChar = 95
ElseIf someChar = "`" Then
 WriteKeyAsciiFromChar = 96
ElseIf someChar = "a" Then
 WriteKeyAsciiFromChar = 97
ElseIf someChar = "b" Then
 WriteKeyAsciiFromChar = 98
ElseIf someChar = "c" Then
 WriteKeyAsciiFromChar = 99
ElseIf someChar = "d" Then
 WriteKeyAsciiFromChar = 100
ElseIf someChar = "e" Then
 WriteKeyAsciiFromChar = 101
ElseIf someChar = "f" Then
 WriteKeyAsciiFromChar = 102
ElseIf someChar = "g" Then
 WriteKeyAsciiFromChar = 103
ElseIf someChar = "h" Then
 WriteKeyAsciiFromChar = 104
ElseIf someChar = "i" Then
 WriteKeyAsciiFromChar = 105
ElseIf someChar = "j" Then
 WriteKeyAsciiFromChar = 106
ElseIf someChar = "k" Then
 WriteKeyAsciiFromChar = 107
ElseIf someChar = "l" Then
 WriteKeyAsciiFromChar = 108
ElseIf someChar = "m" Then
 WriteKeyAsciiFromChar = 109
ElseIf someChar = "n" Then
 WriteKeyAsciiFromChar = 110
ElseIf someChar = "o" Then
 WriteKeyAsciiFromChar = 111
ElseIf someChar = "p" Then
 WriteKeyAsciiFromChar = 112
ElseIf someChar = "q" Then
 WriteKeyAsciiFromChar = 113
ElseIf someChar = "r" Then
 WriteKeyAsciiFromChar = 114
ElseIf someChar = "s" Then
 WriteKeyAsciiFromChar = 115
ElseIf someChar = "t" Then
 WriteKeyAsciiFromChar = 116
ElseIf someChar = "u" Then
 WriteKeyAsciiFromChar = 117
ElseIf someChar = "v" Then
 WriteKeyAsciiFromChar = 118
ElseIf someChar = "w" Then
 WriteKeyAsciiFromChar = 119
ElseIf someChar = "x" Then
 WriteKeyAsciiFromChar = 120
ElseIf someChar = "y" Then
 WriteKeyAsciiFromChar = 121
ElseIf someChar = "z" Then
 WriteKeyAsciiFromChar = 122
ElseIf someChar = "{" Then
 WriteKeyAsciiFromChar = 123
ElseIf someChar = "|" Then
 WriteKeyAsciiFromChar = 124
ElseIf someChar = "}" Then
 WriteKeyAsciiFromChar = 125
ElseIf someChar = "~" Then
 WriteKeyAsciiFromChar = 126
ElseIf UCase(someChar) = "DEL" Or UCase(someChar) = "DELETE" Or UCase(someChar) = "CTRL-BACKSPACE" Or UCase(someChar) = "CTRL BACKSPACE" Or UCase(someChar) = "CTRL BS" Or UCase(someChar) = "CTRL-BS" Then
 WriteKeyAsciiFromChar = 127
ElseIf someChar = "€" Or UCase(someChar) = "ALT+0128" Or UCase(someChar) = "ALT 0128" Then
 WriteKeyAsciiFromChar = 128
ElseIf someChar = "" Or UCase(someChar) = "ALT+0129" Or UCase(someChar) = "ALT 0129" Then
 WriteKeyAsciiFromChar = 129
ElseIf someChar = "" Or UCase(someChar) = "ALT+0130" Or UCase(someChar) = "ALT 0130" Then
 WriteKeyAsciiFromChar = 130
ElseIf someChar = "" Or UCase(someChar) = "ALT+0131" Or UCase(someChar) = "ALT 0131" Then
 WriteKeyAsciiFromChar = 131
ElseIf someChar = "" Or UCase(someChar) = "ALT+0132" Or UCase(someChar) = "ALT 0132" Then
 WriteKeyAsciiFromChar = 132
ElseIf someChar = "" Or UCase(someChar) = "ALT+0133" Or UCase(someChar) = "ALT 0133" Then
 WriteKeyAsciiFromChar = 133
ElseIf someChar = "" Or UCase(someChar) = "ALT+0134" Or UCase(someChar) = "ALT 0134" Then
 WriteKeyAsciiFromChar = 134
ElseIf someChar = "" Or UCase(someChar) = "ALT+0135" Or UCase(someChar) = "ALT 0135" Then
 WriteKeyAsciiFromChar = 135
ElseIf someChar = "" Or UCase(someChar) = "ALT+0136" Or UCase(someChar) = "ALT 0136" Then
 WriteKeyAsciiFromChar = 136
ElseIf someChar = "" Or UCase(someChar) = "ALT+0137" Or UCase(someChar) = "ALT 0137" Then
 WriteKeyAsciiFromChar = 137
ElseIf someChar = "" Or UCase(someChar) = "ALT+0138" Or UCase(someChar) = "ALT 0138" Then
 WriteKeyAsciiFromChar = 138
ElseIf someChar = "" Or UCase(someChar) = "ALT+0139" Or UCase(someChar) = "ALT 0139" Then
 WriteKeyAsciiFromChar = 139
ElseIf someChar = "" Or UCase(someChar) = "ALT+0140" Or UCase(someChar) = "ALT 0140" Then
 WriteKeyAsciiFromChar = 140
ElseIf someChar = "" Or UCase(someChar) = "ALT+0141" Or UCase(someChar) = "ALT 0141" Then
 WriteKeyAsciiFromChar = 141
ElseIf someChar = "" Or UCase(someChar) = "ALT+0142" Or UCase(someChar) = "ALT 0142" Then
 WriteKeyAsciiFromChar = 142
ElseIf someChar = "" Or UCase(someChar) = "ALT+0143" Or UCase(someChar) = "ALT 0143" Then
 WriteKeyAsciiFromChar = 143
ElseIf someChar = "" Or UCase(someChar) = "ALT+0144" Or UCase(someChar) = "ALT 0144" Then
 WriteKeyAsciiFromChar = 144
ElseIf someChar = "" Or UCase(someChar) = "ALT+0145" Or UCase(someChar) = "ALT 0145" Then
 WriteKeyAsciiFromChar = 145
ElseIf someChar = "" Or UCase(someChar) = "ALT+0146" Or UCase(someChar) = "ALT 0146" Then
 WriteKeyAsciiFromChar = 146
ElseIf someChar = "" Or UCase(someChar) = "ALT+0147" Or UCase(someChar) = "ALT 0147" Then
 WriteKeyAsciiFromChar = 147
ElseIf someChar = "" Or UCase(someChar) = "ALT+0148" Or UCase(someChar) = "ALT 0148" Then
 WriteKeyAsciiFromChar = 148
ElseIf someChar = "" Or UCase(someChar) = "ALT+0149" Or UCase(someChar) = "ALT 0149" Then
 WriteKeyAsciiFromChar = 149
ElseIf someChar = "" Or UCase(someChar) = "ALT+0150" Or UCase(someChar) = "ALT 0150" Then
 WriteKeyAsciiFromChar = 150
ElseIf someChar = "" Or UCase(someChar) = "ALT+0151" Or UCase(someChar) = "ALT 0151" Then
 WriteKeyAsciiFromChar = 151
ElseIf someChar = "" Or UCase(someChar) = "ALT+0152" Or UCase(someChar) = "ALT 0152" Then
 WriteKeyAsciiFromChar = 152
ElseIf someChar = "" Or UCase(someChar) = "ALT+0153" Or UCase(someChar) = "ALT 0153" Then
 WriteKeyAsciiFromChar = 153
ElseIf someChar = "" Or UCase(someChar) = "ALT+0154" Or UCase(someChar) = "ALT 0154" Then
 WriteKeyAsciiFromChar = 154
ElseIf someChar = "" Or UCase(someChar) = "ALT+0155" Or UCase(someChar) = "ALT 0155" Then
 WriteKeyAsciiFromChar = 155
ElseIf someChar = "" Or UCase(someChar) = "ALT+0156" Or UCase(someChar) = "ALT 0156" Then
 WriteKeyAsciiFromChar = 156
ElseIf someChar = "" Or UCase(someChar) = "ALT+0157" Or UCase(someChar) = "ALT 0157" Then
 WriteKeyAsciiFromChar = 157
ElseIf someChar = "" Or UCase(someChar) = "ALT+0158" Or UCase(someChar) = "ALT 0158" Then
 WriteKeyAsciiFromChar = 158
ElseIf someChar = "" Or UCase(someChar) = "ALT+0159" Or UCase(someChar) = "ALT 0159" Then
 WriteKeyAsciiFromChar = 159
ElseIf someChar = "" Or UCase(someChar) = "ALT+0160" Or UCase(someChar) = "ALT 0160" Then
 WriteKeyAsciiFromChar = 160
ElseIf someChar = "" Or UCase(someChar) = "ALT+0161" Or UCase(someChar) = "ALT 0161" Then
 WriteKeyAsciiFromChar = 161
ElseIf someChar = "" Or UCase(someChar) = "ALT+0162" Or UCase(someChar) = "ALT 0162" Then
 WriteKeyAsciiFromChar = 162
ElseIf someChar = "£" Or UCase(someChar) = "ALT+0163" Or UCase(someChar) = "ALT 0163" Then
 WriteKeyAsciiFromChar = 163
ElseIf someChar = "" Or UCase(someChar) = "ALT+0164" Or UCase(someChar) = "ALT 0164" Then
 WriteKeyAsciiFromChar = 164
ElseIf someChar = "¥" Or UCase(someChar) = "ALT+0165" Or UCase(someChar) = "ALT 0165" Then
 WriteKeyAsciiFromChar = 165
ElseIf someChar = "" Or UCase(someChar) = "ALT+0166" Or UCase(someChar) = "ALT 0166" Then
 WriteKeyAsciiFromChar = 166
ElseIf someChar = "" Or UCase(someChar) = "ALT+0167" Or UCase(someChar) = "ALT 0167" Then
 WriteKeyAsciiFromChar = 167
ElseIf someChar = "" Or UCase(someChar) = "ALT+0168" Or UCase(someChar) = "ALT 0168" Then
 WriteKeyAsciiFromChar = 168
ElseIf someChar = "" Or UCase(someChar) = "ALT+0169" Or UCase(someChar) = "ALT 0169" Then
 WriteKeyAsciiFromChar = 169
ElseIf someChar = "" Or UCase(someChar) = "ALT+0170" Or UCase(someChar) = "ALT 0170" Then
 WriteKeyAsciiFromChar = 170
ElseIf someChar = "" Or UCase(someChar) = "ALT+0171" Or UCase(someChar) = "ALT 0171" Then
 WriteKeyAsciiFromChar = 171
ElseIf someChar = "" Or UCase(someChar) = "ALT+0172" Or UCase(someChar) = "ALT 0172" Then
 WriteKeyAsciiFromChar = 172
ElseIf someChar = "" Or UCase(someChar) = "ALT+0173" Or UCase(someChar) = "ALT 0173" Then
 WriteKeyAsciiFromChar = 173
ElseIf someChar = "" Or UCase(someChar) = "ALT+0174" Or UCase(someChar) = "ALT 0174" Then
 WriteKeyAsciiFromChar = 174
ElseIf someChar = "" Or UCase(someChar) = "ALT+0175" Or UCase(someChar) = "ALT 0175" Then
 WriteKeyAsciiFromChar = 175
ElseIf someChar = "" Or UCase(someChar) = "ALT+0176" Or UCase(someChar) = "ALT 0176" Then
 WriteKeyAsciiFromChar = 176
ElseIf someChar = "" Or UCase(someChar) = "ALT+0177" Or UCase(someChar) = "ALT 0177" Then
 WriteKeyAsciiFromChar = 177
ElseIf someChar = "" Or UCase(someChar) = "ALT+0178" Or UCase(someChar) = "ALT 0178" Then
 WriteKeyAsciiFromChar = 178
ElseIf someChar = "" Or UCase(someChar) = "ALT+0179" Or UCase(someChar) = "ALT 0179" Then
 WriteKeyAsciiFromChar = 179
ElseIf someChar = "" Or UCase(someChar) = "ALT+0180" Or UCase(someChar) = "ALT 0180" Then
 WriteKeyAsciiFromChar = 180
ElseIf someChar = "" Or UCase(someChar) = "ALT+0181" Or UCase(someChar) = "ALT 0181" Then
 WriteKeyAsciiFromChar = 181
ElseIf someChar = "" Or UCase(someChar) = "ALT+0182" Or UCase(someChar) = "ALT 0182" Then
 WriteKeyAsciiFromChar = 182
ElseIf someChar = "" Or UCase(someChar) = "ALT+0183" Or UCase(someChar) = "ALT 0183" Then
 WriteKeyAsciiFromChar = 183
ElseIf someChar = "" Or UCase(someChar) = "ALT+0184" Or UCase(someChar) = "ALT 0184" Then
 WriteKeyAsciiFromChar = 184
ElseIf someChar = "" Or UCase(someChar) = "ALT+0185" Or UCase(someChar) = "ALT 0185" Then
 WriteKeyAsciiFromChar = 185
ElseIf someChar = "" Or UCase(someChar) = "ALT+0186" Or UCase(someChar) = "ALT 0186" Then
 WriteKeyAsciiFromChar = 186
ElseIf someChar = "" Or UCase(someChar) = "ALT+0187" Or UCase(someChar) = "ALT 0187" Then
 WriteKeyAsciiFromChar = 187
ElseIf someChar = "" Or UCase(someChar) = "ALT+0188" Or UCase(someChar) = "ALT 0188" Then
 WriteKeyAsciiFromChar = 188
ElseIf someChar = "" Or UCase(someChar) = "ALT+0189" Or UCase(someChar) = "ALT 0189" Then
 WriteKeyAsciiFromChar = 189
ElseIf someChar = "" Or UCase(someChar) = "ALT+0190" Or UCase(someChar) = "ALT 0190" Then
 WriteKeyAsciiFromChar = 190
ElseIf someChar = "" Or UCase(someChar) = "ALT+0191" Or UCase(someChar) = "ALT 0191" Then
 WriteKeyAsciiFromChar = 191
ElseIf someChar = "" Or UCase(someChar) = "ALT+0192" Or UCase(someChar) = "ALT 0192" Then
 WriteKeyAsciiFromChar = 192
ElseIf someChar = "" Or UCase(someChar) = "ALT+0193" Or UCase(someChar) = "ALT 0193" Then
 WriteKeyAsciiFromChar = 193
ElseIf someChar = "" Or UCase(someChar) = "ALT+0194" Or UCase(someChar) = "ALT 0194" Then
 WriteKeyAsciiFromChar = 194
ElseIf someChar = "" Or UCase(someChar) = "ALT+0195" Or UCase(someChar) = "ALT 0195" Then
 WriteKeyAsciiFromChar = 195
ElseIf someChar = "" Or UCase(someChar) = "ALT+0196" Or UCase(someChar) = "ALT 0196" Then
 WriteKeyAsciiFromChar = 196
ElseIf someChar = "" Or UCase(someChar) = "ALT+0197" Or UCase(someChar) = "ALT 0197" Then
 WriteKeyAsciiFromChar = 197
ElseIf someChar = "" Or UCase(someChar) = "ALT+0198" Or UCase(someChar) = "ALT 0198" Then
 WriteKeyAsciiFromChar = 198
ElseIf someChar = "" Or UCase(someChar) = "ALT+0199" Or UCase(someChar) = "ALT 0199" Then
 WriteKeyAsciiFromChar = 199
ElseIf someChar = "" Or UCase(someChar) = "ALT+0200" Or UCase(someChar) = "ALT 0200" Then
 WriteKeyAsciiFromChar = 200
ElseIf someChar = "" Or UCase(someChar) = "ALT+0201" Or UCase(someChar) = "ALT 0201" Then
 WriteKeyAsciiFromChar = 201
ElseIf someChar = "" Or UCase(someChar) = "ALT+0202" Or UCase(someChar) = "ALT 0202" Then
 WriteKeyAsciiFromChar = 202
ElseIf someChar = "" Or UCase(someChar) = "ALT+0203" Or UCase(someChar) = "ALT 0203" Then
 WriteKeyAsciiFromChar = 203
ElseIf someChar = "" Or UCase(someChar) = "ALT+0204" Or UCase(someChar) = "ALT 0204" Then
 WriteKeyAsciiFromChar = 204
ElseIf someChar = "" Or UCase(someChar) = "ALT+0205" Or UCase(someChar) = "ALT 0205" Then
 WriteKeyAsciiFromChar = 205
ElseIf someChar = "" Or UCase(someChar) = "ALT+0206" Or UCase(someChar) = "ALT 0206" Then
 WriteKeyAsciiFromChar = 206
ElseIf someChar = "" Or UCase(someChar) = "ALT+0207" Or UCase(someChar) = "ALT 0207" Then
 WriteKeyAsciiFromChar = 207
ElseIf someChar = "" Or UCase(someChar) = "ALT+0208" Or UCase(someChar) = "ALT 0208" Then
 WriteKeyAsciiFromChar = 208
ElseIf someChar = "" Or UCase(someChar) = "ALT+0209" Or UCase(someChar) = "ALT 0209" Then
 WriteKeyAsciiFromChar = 209
ElseIf someChar = "" Or UCase(someChar) = "ALT+0210" Or UCase(someChar) = "ALT 0210" Then
 WriteKeyAsciiFromChar = 210
ElseIf someChar = "" Or UCase(someChar) = "ALT+0211" Or UCase(someChar) = "ALT 0211" Then
 WriteKeyAsciiFromChar = 211
ElseIf someChar = "" Or UCase(someChar) = "ALT+0212" Or UCase(someChar) = "ALT 0212" Then
 WriteKeyAsciiFromChar = 212
ElseIf someChar = "" Or UCase(someChar) = "ALT+0213" Or UCase(someChar) = "ALT 0213" Then
 WriteKeyAsciiFromChar = 213
ElseIf someChar = "" Or UCase(someChar) = "ALT+0214" Or UCase(someChar) = "ALT 0214" Then
 WriteKeyAsciiFromChar = 214
ElseIf someChar = "" Or UCase(someChar) = "ALT+0215" Or UCase(someChar) = "ALT 0215" Then
 WriteKeyAsciiFromChar = 215
ElseIf someChar = "" Or UCase(someChar) = "ALT+0216" Or UCase(someChar) = "ALT 0216" Then
 WriteKeyAsciiFromChar = 216
ElseIf someChar = "" Or UCase(someChar) = "ALT+0217" Or UCase(someChar) = "ALT 0217" Then
 WriteKeyAsciiFromChar = 217
ElseIf someChar = "" Or UCase(someChar) = "ALT+0218" Or UCase(someChar) = "ALT 0218" Then
 WriteKeyAsciiFromChar = 218
ElseIf someChar = "" Or UCase(someChar) = "ALT+0219" Or UCase(someChar) = "ALT 0219" Then
 WriteKeyAsciiFromChar = 219
ElseIf someChar = "" Or UCase(someChar) = "ALT+0220" Or UCase(someChar) = "ALT 0220" Then
 WriteKeyAsciiFromChar = 220
ElseIf someChar = "" Or UCase(someChar) = "ALT+0221" Or UCase(someChar) = "ALT 0221" Then
 WriteKeyAsciiFromChar = 221
ElseIf someChar = "" Or UCase(someChar) = "ALT+0222" Or UCase(someChar) = "ALT 0222" Then
 WriteKeyAsciiFromChar = 222
ElseIf someChar = "" Or UCase(someChar) = "ALT+0223" Or UCase(someChar) = "ALT 0223" Then
 WriteKeyAsciiFromChar = 223
ElseIf someChar = "" Or UCase(someChar) = "ALT+0224" Or UCase(someChar) = "ALT 0224" Then
 WriteKeyAsciiFromChar = 224
ElseIf someChar = "" Or UCase(someChar) = "ALT+0225" Or UCase(someChar) = "ALT 0225" Then
 WriteKeyAsciiFromChar = 225
ElseIf someChar = "" Or UCase(someChar) = "ALT+0226" Or UCase(someChar) = "ALT 0226" Then
 WriteKeyAsciiFromChar = 226
ElseIf someChar = "" Or UCase(someChar) = "ALT+0227" Or UCase(someChar) = "ALT 0227" Then
 WriteKeyAsciiFromChar = 227
ElseIf someChar = "" Or UCase(someChar) = "ALT+0228" Or UCase(someChar) = "ALT 0228" Then
 WriteKeyAsciiFromChar = 228
ElseIf someChar = "" Or UCase(someChar) = "ALT+0229" Or UCase(someChar) = "ALT 0229" Then
 WriteKeyAsciiFromChar = 229
ElseIf someChar = "" Or UCase(someChar) = "ALT+0230" Or UCase(someChar) = "ALT 0230" Then
 WriteKeyAsciiFromChar = 230
ElseIf someChar = "" Or UCase(someChar) = "ALT+0231" Or UCase(someChar) = "ALT 0231" Then
 WriteKeyAsciiFromChar = 231
ElseIf someChar = "" Or UCase(someChar) = "ALT+0232" Or UCase(someChar) = "ALT 0232" Then
 WriteKeyAsciiFromChar = 232
ElseIf someChar = "" Or UCase(someChar) = "ALT+0233" Or UCase(someChar) = "ALT 0233" Then
 WriteKeyAsciiFromChar = 233
ElseIf someChar = "" Or UCase(someChar) = "ALT+0234" Or UCase(someChar) = "ALT 0234" Then
 WriteKeyAsciiFromChar = 234
ElseIf someChar = "" Or UCase(someChar) = "ALT+0235" Or UCase(someChar) = "ALT 0235" Then
 WriteKeyAsciiFromChar = 235
ElseIf someChar = "" Or UCase(someChar) = "ALT+0236" Or UCase(someChar) = "ALT 0236" Then
 WriteKeyAsciiFromChar = 236
ElseIf someChar = "" Or UCase(someChar) = "ALT+0237" Or UCase(someChar) = "ALT 0237" Then
 WriteKeyAsciiFromChar = 237
ElseIf someChar = "" Or UCase(someChar) = "ALT+0238" Or UCase(someChar) = "ALT 0238" Then
 WriteKeyAsciiFromChar = 238
ElseIf someChar = "" Or UCase(someChar) = "ALT+0239" Or UCase(someChar) = "ALT 0239" Then
 WriteKeyAsciiFromChar = 239
ElseIf someChar = "" Or UCase(someChar) = "ALT+0240" Or UCase(someChar) = "ALT 0240" Then
 WriteKeyAsciiFromChar = 240
ElseIf someChar = "" Or UCase(someChar) = "ALT+0241" Or UCase(someChar) = "ALT 0241" Then
 WriteKeyAsciiFromChar = 241
ElseIf someChar = "" Or UCase(someChar) = "ALT+0242" Or UCase(someChar) = "ALT 0242" Then
 WriteKeyAsciiFromChar = 242
ElseIf someChar = "" Or UCase(someChar) = "ALT+0243" Or UCase(someChar) = "ALT 0243" Then
 WriteKeyAsciiFromChar = 243
ElseIf someChar = "" Or UCase(someChar) = "ALT+0244" Or UCase(someChar) = "ALT 0244" Then
 WriteKeyAsciiFromChar = 244
ElseIf someChar = "" Or UCase(someChar) = "ALT+0245" Or UCase(someChar) = "ALT 0245" Then
 WriteKeyAsciiFromChar = 245
ElseIf someChar = "" Or UCase(someChar) = "ALT+0246" Or UCase(someChar) = "ALT 0246" Then
 WriteKeyAsciiFromChar = 246
ElseIf someChar = "" Or UCase(someChar) = "ALT+0247" Or UCase(someChar) = "ALT 0247" Then
 WriteKeyAsciiFromChar = 247
ElseIf someChar = "" Or UCase(someChar) = "ALT+0248" Or UCase(someChar) = "ALT 0248" Then
 WriteKeyAsciiFromChar = 248
ElseIf someChar = "" Or UCase(someChar) = "ALT+0249" Or UCase(someChar) = "ALT 0249" Then
 WriteKeyAsciiFromChar = 249
ElseIf someChar = "" Or UCase(someChar) = "ALT+0250" Or UCase(someChar) = "ALT 0250" Then
 WriteKeyAsciiFromChar = 250
ElseIf someChar = "" Or UCase(someChar) = "ALT+0251" Or UCase(someChar) = "ALT 0251" Then
 WriteKeyAsciiFromChar = 251
ElseIf someChar = "" Or UCase(someChar) = "ALT+0252" Or UCase(someChar) = "ALT 0252" Then
 WriteKeyAsciiFromChar = 252
ElseIf someChar = "" Or UCase(someChar) = "ALT+0253" Or UCase(someChar) = "ALT 0253" Then
 WriteKeyAsciiFromChar = 253
ElseIf someChar = "" Or UCase(someChar) = "ALT+0254" Or UCase(someChar) = "ALT 0254" Then
 WriteKeyAsciiFromChar = 254
ElseIf someChar = "" Or UCase(someChar) = "ALT+0255" Or UCase(someChar) = "ALT 0255" Then
 WriteKeyAsciiFromChar = 255
Else
 WriteKeyAsciiFromChar = 666
End If

End Function

'8.) WriteKeyCodeFromChar() is a function that will take
'a character and will output it's equivalent KeyCode value.
'It only takes one argument which is the character itself as a string.
'It will return "666" if there is no equivalent KeyCode value.
Public Function WriteKeyCodeFromChar(someChar As String) As Integer
 If someChar = " " Then
  WriteKeyCodeFromChar = 32
 Else
  someChar = Trim(someChar)
  If UCase(someChar) = "NO KEY" Then
   WriteKeyCodeFromChar = 0
  ElseIf UCase(someChar) = "LMOUSE" Then
   WriteKeyCodeFromChar = 1
  ElseIf UCase(someChar) = "RMOUSE" Then
   WriteKeyCodeFromChar = 2
  ElseIf UCase(someChar) = "CANCEL" Then
   WriteKeyCodeFromChar = 3
  ElseIf UCase(someChar) = "MMOUSE" Then
   WriteKeyCodeFromChar = 4
  ElseIf UCase(someChar) = "FIRST X" Then
   WriteKeyCodeFromChar = 5
  ElseIf UCase(someChar) = "SECOND X" Then
   WriteKeyCodeFromChar = 6
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 7
  ElseIf UCase(someChar) = "BACKSPACE" Or UCase(someChar) = "BS" Then
   WriteKeyCodeFromChar = 8
  ElseIf UCase(someChar) = "TAB" Then
   WriteKeyCodeFromChar = 9
  ElseIf UCase(someChar) = "LINEFEED" Or UCase(someChar) = "LF" Then
   WriteKeyCodeFromChar = 10
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 11
  ElseIf UCase(someChar) = "CLEAR" Then
   WriteKeyCodeFromChar = 12
  ElseIf UCase(someChar) = "RETURN" Then
   WriteKeyCodeFromChar = 13
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 14
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 15
  ElseIf UCase(someChar) = "SHIFT" Then
   WriteKeyCodeFromChar = 16
  ElseIf UCase(someChar) = "CTRL" Then
   WriteKeyCodeFromChar = 17
  ElseIf UCase(someChar) = "ALT" Then
   WriteKeyCodeFromChar = 18
  ElseIf UCase(someChar) = "PAUSE" Then
   WriteKeyCodeFromChar = 19
  ElseIf UCase(someChar) = "CAPSLOCK" Then
   WriteKeyCodeFromChar = 20
  ElseIf UCase(someChar) = "IME_KANA" Then
   WriteKeyCodeFromChar = 21
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 22
  ElseIf UCase(someChar) = "IME_JUNJA" Then
   WriteKeyCodeFromChar = 23
  ElseIf UCase(someChar) = "IME_FINAL" Then
   WriteKeyCodeFromChar = 24
  ElseIf UCase(someChar) = "IME_HANJA" Then
   WriteKeyCodeFromChar = 25
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 26
  ElseIf UCase(someChar) = "ESC" Then
   WriteKeyCodeFromChar = 27
  ElseIf UCase(someChar) = "IME_CONV" Then
   WriteKeyCodeFromChar = 28
  ElseIf UCase(someChar) = "IME_NONC" Then
   WriteKeyCodeFromChar = 29
  ElseIf UCase(someChar) = "IME_ACPT" Then
   WriteKeyCodeFromChar = 30
  ElseIf UCase(someChar) = "IME_MODE" Then
   WriteKeyCodeFromChar = 31
  ElseIf UCase(someChar) = "SPACE" Then
   WriteKeyCodeFromChar = 32
  ElseIf UCase(someChar) = "PGUP" Then
   WriteKeyCodeFromChar = 33
  ElseIf UCase(someChar) = "PGDN" Then
   WriteKeyCodeFromChar = 34
  ElseIf UCase(someChar) = "END" Then
   WriteKeyCodeFromChar = 35
  ElseIf UCase(someChar) = "HOME" Then
   WriteKeyCodeFromChar = 36
  ElseIf UCase(someChar) = "LEFT" Then
   WriteKeyCodeFromChar = 37
  ElseIf UCase(someChar) = "UP" Then
   WriteKeyCodeFromChar = 38
  ElseIf UCase(someChar) = "RIGHT" Then
   WriteKeyCodeFromChar = 39
  ElseIf UCase(someChar) = "DOWN" Then
   WriteKeyCodeFromChar = 40
  ElseIf UCase(someChar) = "SELECT" Then
   WriteKeyCodeFromChar = 41
  ElseIf UCase(someChar) = "PRINT" Then
   WriteKeyCodeFromChar = 42
  ElseIf UCase(someChar) = "EXECUTE" Then
   WriteKeyCodeFromChar = 43
  ElseIf UCase(someChar) = "PRINTSCR" Then
   WriteKeyCodeFromChar = 44
  ElseIf UCase(someChar) = "INSERT" Then
   WriteKeyCodeFromChar = 45
  ElseIf UCase(someChar) = "DELETE" Then
   WriteKeyCodeFromChar = 46
  ElseIf UCase(someChar) = "HELP" Then
   WriteKeyCodeFromChar = 47
  ElseIf someChar = ")" Or someChar = "0" Then
   WriteKeyCodeFromChar = 48
  ElseIf someChar = "!" Or someChar = "1" Then
   WriteKeyCodeFromChar = 49
  ElseIf someChar = "@" Or someChar = "2" Then
   WriteKeyCodeFromChar = 50
  ElseIf someChar = "#" Or someChar = "3" Then
   WriteKeyCodeFromChar = 51
  ElseIf someChar = "$" Or someChar = "4" Then
   WriteKeyCodeFromChar = 52
  ElseIf someChar = "%" Or someChar = "5" Then
   WriteKeyCodeFromChar = 53
  ElseIf someChar = "^" Or someChar = "6" Then
   WriteKeyCodeFromChar = 54
  ElseIf someChar = "&" Or someChar = "7" Then
   WriteKeyCodeFromChar = 55
  ElseIf someChar = "*" Or someChar = "8" Then
   WriteKeyCodeFromChar = 56
  ElseIf someChar = "(" Or someChar = "9" Then
   WriteKeyCodeFromChar = 57
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 58
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 59
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 60
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 61
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 62
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 63
  ElseIf UCase(someChar) = "UNDEFINED" Then
   WriteKeyCodeFromChar = 64
  ElseIf UCase(someChar) = "A" Then
   WriteKeyCodeFromChar = 65
  ElseIf UCase(someChar) = "B" Then
   WriteKeyCodeFromChar = 66
  ElseIf UCase(someChar) = "C" Then
   WriteKeyCodeFromChar = 67
  ElseIf UCase(someChar) = "D" Then
   WriteKeyCodeFromChar = 68
  ElseIf UCase(someChar) = "E" Then
   WriteKeyCodeFromChar = 69
  ElseIf UCase(someChar) = "F" Then
   WriteKeyCodeFromChar = 70
  ElseIf UCase(someChar) = "G" Then
   WriteKeyCodeFromChar = 71
  ElseIf UCase(someChar) = "H" Then
   WriteKeyCodeFromChar = 72
  ElseIf UCase(someChar) = "I" Then
   WriteKeyCodeFromChar = 73
  ElseIf UCase(someChar) = "J" Then
   WriteKeyCodeFromChar = 74
  ElseIf UCase(someChar) = "K" Then
   WriteKeyCodeFromChar = 75
  ElseIf UCase(someChar) = "L" Then
   WriteKeyCodeFromChar = 76
  ElseIf UCase(someChar) = "M" Then
   WriteKeyCodeFromChar = 77
  ElseIf UCase(someChar) = "N" Then
   WriteKeyCodeFromChar = 78
  ElseIf UCase(someChar) = "O" Then
   WriteKeyCodeFromChar = 79
  ElseIf UCase(someChar) = "P" Then
   WriteKeyCodeFromChar = 80
  ElseIf UCase(someChar) = "Q" Then
   WriteKeyCodeFromChar = 81
  ElseIf UCase(someChar) = "R" Then
   WriteKeyCodeFromChar = 82
  ElseIf UCase(someChar) = "S" Then
   WriteKeyCodeFromChar = 83
  ElseIf UCase(someChar) = "T" Then
   WriteKeyCodeFromChar = 84
  ElseIf UCase(someChar) = "U" Then
   WriteKeyCodeFromChar = 85
  ElseIf UCase(someChar) = "V" Then
   WriteKeyCodeFromChar = 86
  ElseIf UCase(someChar) = "W" Then
   WriteKeyCodeFromChar = 87
  ElseIf UCase(someChar) = "X" Then
   WriteKeyCodeFromChar = 88
  ElseIf UCase(someChar) = "Y" Then
   WriteKeyCodeFromChar = 89
  ElseIf UCase(someChar) = "Z" Then
   WriteKeyCodeFromChar = 90
  ElseIf UCase(someChar) = "LWINDOWS" Then
   WriteKeyCodeFromChar = 91
  ElseIf UCase(someChar) = "RWINDOWS" Then
   WriteKeyCodeFromChar = 92
  ElseIf UCase(someChar) = "CONTEXT" Then
   WriteKeyCodeFromChar = 93
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 94
  ElseIf UCase(someChar) = "SLEEP" Then
   WriteKeyCodeFromChar = 95
  ElseIf UCase(someChar) = "INSERT" Or someChar = "0" Then
   WriteKeyCodeFromChar = 96
  ElseIf UCase(someChar) = "END" Or someChar = "1" Then
   WriteKeyCodeFromChar = 97
  ElseIf UCase(someChar) = "DOWN" Or someChar = "2" Then
   WriteKeyCodeFromChar = 98
  ElseIf UCase(someChar) = "PGDN" Or someChar = "3" Then
   WriteKeyCodeFromChar = 99
  ElseIf UCase(someChar) = "LEFT" Or someChar = "4" Then
   WriteKeyCodeFromChar = 100
  ElseIf someChar = "5" Then
   WriteKeyCodeFromChar = 101
  ElseIf UCase(someChar) = "RIGHT" Or someChar = "6" Then
   WriteKeyCodeFromChar = 102
  ElseIf UCase(someChar) = "HOME" Or someChar = "7" Then
   WriteKeyCodeFromChar = 103
  ElseIf UCase(someChar) = "UP" Or someChar = "8" Then
   WriteKeyCodeFromChar = 104
  ElseIf UCase(someChar) = "PGUP" Or someChar = "9" Then
   WriteKeyCodeFromChar = 105
  ElseIf someChar = "*" Then
   WriteKeyCodeFromChar = 106
  ElseIf someChar = "+" Then
   WriteKeyCodeFromChar = 107
  ElseIf UCase(someChar) = "SEPARATOR" Then
   WriteKeyCodeFromChar = 108
  ElseIf someChar = "-" Then
   WriteKeyCodeFromChar = 109
  ElseIf UCase(someChar) = "DEL" Then
   WriteKeyCodeFromChar = 110
  ElseIf someChar = "/" Then
   WriteKeyCodeFromChar = 111
  ElseIf UCase(someChar) = "F1" Then
   WriteKeyCodeFromChar = 112
  ElseIf UCase(someChar) = "F2" Then
   WriteKeyCodeFromChar = 113
  ElseIf UCase(someChar) = "F3" Then
   WriteKeyCodeFromChar = 114
  ElseIf UCase(someChar) = "F4" Then
   WriteKeyCodeFromChar = 115
  ElseIf UCase(someChar) = "F5" Then
   WriteKeyCodeFromChar = 116
  ElseIf UCase(someChar) = "F6" Then
   WriteKeyCodeFromChar = 117
  ElseIf UCase(someChar) = "F7" Then
   WriteKeyCodeFromChar = 118
  ElseIf UCase(someChar) = "F8" Then
   WriteKeyCodeFromChar = 119
  ElseIf UCase(someChar) = "F9" Then
   WriteKeyCodeFromChar = 120
  ElseIf UCase(someChar) = "F10" Then
   WriteKeyCodeFromChar = 121
  ElseIf UCase(someChar) = "F11" Then
   WriteKeyCodeFromChar = 122
  ElseIf UCase(someChar) = "F12" Then
   WriteKeyCodeFromChar = 123
  ElseIf UCase(someChar) = "F13" Then
   WriteKeyCodeFromChar = 124
  ElseIf UCase(someChar) = "F14" Then
   WriteKeyCodeFromChar = 125
  ElseIf UCase(someChar) = "F15" Then
   WriteKeyCodeFromChar = 126
  ElseIf UCase(someChar) = "F16" Then
   WriteKeyCodeFromChar = 127
  ElseIf UCase(someChar) = "F17" Then
   WriteKeyCodeFromChar = 128
  ElseIf UCase(someChar) = "F18" Then
   WriteKeyCodeFromChar = 129
  ElseIf UCase(someChar) = "F19" Then
   WriteKeyCodeFromChar = 130
  ElseIf UCase(someChar) = "F20" Then
   WriteKeyCodeFromChar = 131
  ElseIf UCase(someChar) = "F21" Then
   WriteKeyCodeFromChar = 132
  ElseIf UCase(someChar) = "F22" Then
   WriteKeyCodeFromChar = 133
  ElseIf UCase(someChar) = "F23" Then
   WriteKeyCodeFromChar = 134
  ElseIf UCase(someChar) = "F24" Then
   WriteKeyCodeFromChar = 135
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 136
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 137
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 138
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 139
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 140
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 141
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 142
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 143
  ElseIf UCase(someChar) = "NUMLOCK" Then
   WriteKeyCodeFromChar = 144
  ElseIf UCase(someChar) = "SCRLLOCK" Then
   WriteKeyCodeFromChar = 145
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 146
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 147
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 148
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 149
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 150
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 151
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 152
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 153
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 154
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 155
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 156
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 157
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 158
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 159
  ElseIf UCase(someChar) = "LSHIFT" Then
   WriteKeyCodeFromChar = 160
  ElseIf UCase(someChar) = "RSHIFT" Then
   WriteKeyCodeFromChar = 161
  ElseIf UCase(someChar) = "LCTRL" Then
   WriteKeyCodeFromChar = 162
  ElseIf UCase(someChar) = "RCTRL" Then
   WriteKeyCodeFromChar = 163
  ElseIf UCase(someChar) = "LALT" Then
   WriteKeyCodeFromChar = 164
  ElseIf UCase(someChar) = "RALT" Then
   WriteKeyCodeFromChar = 165
  ElseIf UCase(someChar) = "BACK" Then
   WriteKeyCodeFromChar = 166
  ElseIf UCase(someChar) = "FORWARD" Then
   WriteKeyCodeFromChar = 167
  ElseIf UCase(someChar) = "REFRESH" Then
   WriteKeyCodeFromChar = 168
  ElseIf UCase(someChar) = "STOP" Then
   WriteKeyCodeFromChar = 169
  ElseIf UCase(someChar) = "SEARCH" Then
   WriteKeyCodeFromChar = 170
  ElseIf UCase(someChar) = "FAVORITES" Then
   WriteKeyCodeFromChar = 171
  ElseIf UCase(someChar) = "HOME" Then
   WriteKeyCodeFromChar = 172
  ElseIf UCase(someChar) = "MUTE" Then
   WriteKeyCodeFromChar = 173
  ElseIf UCase(someChar) = "VOLDOWN" Then
   WriteKeyCodeFromChar = 174
  ElseIf UCase(someChar) = "VOLUP" Then
   WriteKeyCodeFromChar = 175
  ElseIf UCase(someChar) = "NEXT" Then
   WriteKeyCodeFromChar = 176
  ElseIf UCase(someChar) = "PREV" Then
   WriteKeyCodeFromChar = 177
  ElseIf UCase(someChar) = "STOP" Then
   WriteKeyCodeFromChar = 178
  ElseIf UCase(someChar) = "PLAY" Then
   WriteKeyCodeFromChar = 179
  ElseIf UCase(someChar) = "EMAIL" Then
   WriteKeyCodeFromChar = 180
  ElseIf UCase(someChar) = "MEDIA" Then
   WriteKeyCodeFromChar = 181
  ElseIf UCase(someChar) = "START1" Then
   WriteKeyCodeFromChar = 182
  ElseIf UCase(someChar) = "START2" Then
   WriteKeyCodeFromChar = 183
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 184
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 185
  ElseIf someChar = ":" Or someChar = ";" Then
   WriteKeyCodeFromChar = 186
  ElseIf someChar = "+" Or someChar = "=" Then
   WriteKeyCodeFromChar = 187
  ElseIf someChar = "<" Or someChar = "," Then
   WriteKeyCodeFromChar = 188
  ElseIf someChar = "_" Or someChar = "-" Then
   WriteKeyCodeFromChar = 189
  ElseIf someChar = ">" Or someChar = "." Then
   WriteKeyCodeFromChar = 190
  ElseIf someChar = "?" Or someChar = "/" Then
   WriteKeyCodeFromChar = 191
  ElseIf someChar = "~" Or someChar = "`" Then
   WriteKeyCodeFromChar = 192
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 193
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 194
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 195
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 196
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 197
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 198
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 199
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 200
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 201
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 202
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 203
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 204
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 205
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 206
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 207
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 208
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 209
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 210
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 211
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 212
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 213
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 214
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 215
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 216
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 217
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 218
  ElseIf someChar = "{" Or someChar = "[" Then
   WriteKeyCodeFromChar = 219
  ElseIf someChar = "|" Or someChar = "\" Then
   WriteKeyCodeFromChar = 220
  ElseIf someChar = "}" Or someChar = "]" Then
   WriteKeyCodeFromChar = 221
  ElseIf someChar = """" Or someChar = "'" Then
   WriteKeyCodeFromChar = 222
  ElseIf UCase(someChar) = "MISC" Then
   WriteKeyCodeFromChar = 223
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 224
  ElseIf UCase(someChar) = "OEM" Then
   WriteKeyCodeFromChar = 225
  ElseIf UCase(someChar) = "OEM ANG" Then
   WriteKeyCodeFromChar = 226
  ElseIf UCase(someChar) = "OEM" Then
   WriteKeyCodeFromChar = 227
  ElseIf UCase(someChar) = "OEM" Then
   WriteKeyCodeFromChar = 228
  ElseIf UCase(someChar) = "PROCESS" Then
   WriteKeyCodeFromChar = 229
  ElseIf UCase(someChar) = "OEM" Then
   WriteKeyCodeFromChar = 230
  ElseIf UCase(someChar) = "UNICODE" Then
   WriteKeyCodeFromChar = 231
  ElseIf UCase(someChar) = "UNASSIGNED" Then
   WriteKeyCodeFromChar = 232
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 233
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 234
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 235
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 236
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 237
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 238
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 239
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 240
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 241
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 242
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 243
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 244
  ElseIf UCase(someChar) = "OEM SPECIFIC" Then
   WriteKeyCodeFromChar = 245
  ElseIf UCase(someChar) = "ATTN" Then
   WriteKeyCodeFromChar = 246
  ElseIf UCase(someChar) = "CRSEL" Then
   WriteKeyCodeFromChar = 247
  ElseIf UCase(someChar) = "EXSEL" Then
   WriteKeyCodeFromChar = 248
  ElseIf UCase(someChar) = "ERASE EOF" Then
   WriteKeyCodeFromChar = 249
  ElseIf UCase(someChar) = "PLAY" Then
   WriteKeyCodeFromChar = 250
  ElseIf UCase(someChar) = "ZOOM" Then
   WriteKeyCodeFromChar = 251
  ElseIf UCase(someChar) = "RESERVED" Then
   WriteKeyCodeFromChar = 252
  ElseIf UCase(someChar) = "PA1" Then
   WriteKeyCodeFromChar = 253
  ElseIf UCase(someChar) = "CLEAR" Then
   WriteKeyCodeFromChar = 254
  ElseIf UCase(someChar) = "MISC" Then
   WriteKeyCodeFromChar = 255
  Else
   WriteKeyCodeFromChar = 666
  End If
 End If
End Function

'9.) IsShiftCharacter() is a function that will return true if the SHIFT key has to be
'held down to create a certain character. For example to create the dollar sign ($)
'you have to press SHIFT + 4, so IsShiftCharacter("$") would return true.
Public Function IsShiftCharacter(someChar As String) As Boolean
 Select Case WriteKeyAsciiFromChar(someChar)
  Case 33 To 38, 40 To 43, 58, 60, 62 To 90, 94 To 95, 123 To 126
   IsShiftCharacter = True
  Case Default
   IsShiftCharacter = False
 End Select
 '! 33, " 34, # 35, $ 36, % 37, & 38, ( 40, ) 41, * 42, + 43, : 58, < 60, > 62, ? 63, @ 64
 'A 65, B 66, C 67, D 68, E 69, F 70, G 71, H 72, I 73, J 74, K 75, L 76, M 77, N 78
 'O 79, P 80, Q 81, R 82, S 83, T 84, U 85, V 86, W 87, X 88, Y 89, Z 90, ^ 94, _ 95
 '{ 123, | 124, } 125, ~ 126
End Function

'10.) IsShiftDown() is a function that will return true if the SHIFT key is being held down.
Public Function IsShiftDown(Shift As Integer) As Boolean
 If Shift = 1 Or Shift = 3 Or Shift = 5 Or Shift = 7 Then
  IsShiftDown = True
 Else
  IsShiftDown = False
 End If
End Function

'11.) IsCtrlDOwn() is a function that will return true if the CTRL key is being held down.
Public Function IsCtrlDown(Shift As Integer) As Boolean
 If Shift = 2 Or Shift = 3 Or Shift = 6 Or Shift = 7 Then
  IsCtrlDown = True
 Else
  IsCtrlDown = False
 End If
End Function

'12.) IsAltDown() is a function that will return true if the ALT key is being held down.
Public Function IsAltDown(Shift As Integer) As Boolean
 If Shift = 4 Or Shift = 5 Or Shift = 6 Or Shift = 7 Then
  IsAltDown = True
 Else
  IsAltDown = False
 End If
End Function