''' ''' This class serves the only purpose to convert a key form the Keys enumeration to an actual Char that the key represents on the currently loaded keyboard layout. ''' Public Class KeyCharConverter #Region "KeyConversion" ' This shit right here... #Region "VirtualKeys" Private Const QS_EVENT As Integer = &H2000 Private Const VK_CANCEL As Integer = &H3 Private Const VK_BACK As Integer = &H8 Private Const VK_CLEAR As Integer = &HC Private Const VK_RETURN As Integer = &HD Private Const VK_PAUSE As Integer = &H13 Private Const VK_CAPITAL As Integer = &H14 Private Const VK_KANA As Integer = &H15 Private Const VK_HANGEUL As Integer = &H15 Private Const VK_HANGUL As Integer = &H15 Private Const VK_JUNJA As Integer = &H17 Private Const VK_FINAL As Integer = &H18 Private Const VK_HANJA As Integer = &H19 Private Const VK_KANJI As Integer = &H19 Private Const VK_ESCAPE As Integer = &H1B Private Const VK_CONVERT As Integer = &H1C Private Const VK_NONCONVERT As Integer = &H1D Private Const VK_ACCEPT As Integer = &H1E Private Const VK_MODECHANGE As Integer = &H1F Private Const VK_SPACE As Integer = &H20 Private Const VK_PRIOR As Integer = &H21 Private Const VK_NEXT As Integer = &H22 Private Const VK_END As Integer = &H23 Private Const VK_HOME As Integer = &H24 Private Const VK_LEFT As Integer = &H25 Private Const VK_UP As Integer = &H26 Private Const VK_RIGHT As Integer = &H27 Private Const VK_DOWN As Integer = &H28 Private Const VK_SELECT As Integer = &H29 Private Const VK_PRINT As Integer = &H2A Private Const VK_EXECUTE As Integer = &H2B Private Const VK_SNAPSHOT As Integer = &H2C Private Const VK_INSERT As Integer = &H2D Private Const VK_DELETE As Integer = &H2E Private Const VK_HELP As Integer = &H2F Private Const VK_0 As Integer = &H30 Private Const VK_1 As Integer = &H31 Private Const VK_2 As Integer = &H32 Private Const VK_3 As Integer = &H33 Private Const VK_4 As Integer = &H34 Private Const VK_5 As Integer = &H35 Private Const VK_6 As Integer = &H36 Private Const VK_7 As Integer = &H37 Private Const VK_8 As Integer = &H38 Private Const VK_9 As Integer = &H39 Private Const VK_A As Integer = &H41 Private Const VK_B As Integer = &H42 Private Const VK_C As Integer = &H43 Private Const VK_D As Integer = &H44 Private Const VK_E As Integer = &H45 Private Const VK_F As Integer = &H46 Private Const VK_G As Integer = &H47 Private Const VK_H As Integer = &H48 Private Const VK_I As Integer = &H49 Private Const VK_J As Integer = &H4A Private Const VK_K As Integer = &H4B Private Const VK_L As Integer = &H4C Private Const VK_M As Integer = &H4D Private Const VK_N As Integer = &H4E Private Const VK_O As Integer = &H4F Private Const VK_P As Integer = &H50 Private Const VK_Q As Integer = &H51 Private Const VK_R As Integer = &H52 Private Const VK_S As Integer = &H53 Private Const VK_T As Integer = &H54 Private Const VK_U As Integer = &H55 Private Const VK_V As Integer = &H56 Private Const VK_W As Integer = &H57 Private Const VK_X As Integer = &H58 Private Const VK_Y As Integer = &H59 Private Const VK_Z As Integer = &H5A Private Const VK_LWIN As Integer = &H5B Private Const VK_RWIN As Integer = &H5C Private Const VK_APPS As Integer = &H5D Private Const VK_POWER As Integer = &H5E Private Const VK_SLEEP As Integer = &H5F Private Const VK_NUMPAD0 As Integer = &H60 Private Const VK_NUMPAD1 As Integer = &H61 Private Const VK_NUMPAD2 As Integer = &H62 Private Const VK_NUMPAD3 As Integer = &H63 Private Const VK_NUMPAD4 As Integer = &H64 Private Const VK_NUMPAD5 As Integer = &H65 Private Const VK_NUMPAD6 As Integer = &H66 Private Const VK_NUMPAD7 As Integer = &H67 Private Const VK_NUMPAD8 As Integer = &H68 Private Const VK_NUMPAD9 As Integer = &H69 Private Const VK_MULTIPLY As Integer = &H6A Private Const VK_ADD As Integer = &H6B Private Const VK_SEPARATOR As Integer = &H6C Private Const VK_SUBTRACT As Integer = &H6D Private Const VK_DECIMAL As Integer = &H6E Private Const VK_DIVIDE As Integer = &H6F Private Const VK_F1 As Integer = &H70 Private Const VK_F2 As Integer = &H71 Private Const VK_F3 As Integer = &H72 Private Const VK_F4 As Integer = &H73 Private Const VK_F5 As Integer = &H74 Private Const VK_F6 As Integer = &H75 Private Const VK_F7 As Integer = &H76 Private Const VK_F8 As Integer = &H77 Private Const VK_F9 As Integer = &H78 Private Const VK_F10 As Integer = &H79 Private Const VK_F11 As Integer = &H7A Private Const VK_F12 As Integer = &H7B Private Const VK_F13 As Integer = &H7C Private Const VK_F14 As Integer = &H7D Private Const VK_F15 As Integer = &H7E Private Const VK_F16 As Integer = &H7F Private Const VK_F17 As Integer = &H80 Private Const VK_F18 As Integer = &H81 Private Const VK_F19 As Integer = &H82 Private Const VK_F20 As Integer = &H83 Private Const VK_F21 As Integer = &H84 Private Const VK_F22 As Integer = &H85 Private Const VK_F23 As Integer = &H86 Private Const VK_F24 As Integer = &H87 Private Const VK_NUMLOCK As Integer = &H90 Private Const VK_SCROLL As Integer = &H91 Private Const VK_RSHIFT As Integer = &HA1 Private Const VK_BROWSER_BACK As Integer = &HA6 Private Const VK_BROWSER_FORWARD As Integer = &HA7 Private Const VK_BROWSER_REFRESH As Integer = &HA8 Private Const VK_BROWSER_STOP As Integer = &HA9 Private Const VK_BROWSER_SEARCH As Integer = &HAA Private Const VK_BROWSER_FAVORITES As Integer = &HAB Private Const VK_BROWSER_HOME As Integer = &HAC Private Const VK_VOLUME_MUTE As Integer = &HAD Private Const VK_VOLUME_DOWN As Integer = &HAE Private Const VK_VOLUME_UP As Integer = &HAF Private Const VK_MEDIA_NEXT_TRACK As Integer = &HB0 Private Const VK_MEDIA_PREV_TRACK As Integer = &HB1 Private Const VK_MEDIA_STOP As Integer = &HB2 Private Const VK_MEDIA_PLAY_PAUSE As Integer = &HB3 Private Const VK_LAUNCH_MAIL As Integer = &HB4 Private Const VK_LAUNCH_MEDIA_SELECT As Integer = &HB5 Private Const VK_LAUNCH_APP1 As Integer = &HB6 Private Const VK_LAUNCH_APP2 As Integer = &HB7 Private Const VK_PROCESSKEY As Integer = &HE5 Private Const VK_PACKET As Integer = &HE7 Private Const VK_ATTN As Integer = &HF6 Private Const VK_CRSEL As Integer = &HF7 Private Const VK_EXSEL As Integer = &HF8 Private Const VK_EREOF As Integer = &HF9 Private Const VK_PLAY As Integer = &HFA Private Const VK_ZOOM As Integer = &HFB Private Const VK_NONAME As Integer = &HFC Private Const VK_PA1 As Integer = &HFD Private Const VK_OEM_CLEAR As Integer = &HFE Private Const VK_TAB As Integer = &H9 Private Const VK_SHIFT As Integer = &H10 Private Const VK_CONTROL As Integer = &H11 Private Const VK_MENU As Integer = &H12 Private Const VK_LSHIFT As Integer = &HA0 Private Const VK_RMENU As Integer = &HA5 Private Const VK_LMENU As Integer = &HA4 Private Const VK_LCONTROL As Integer = &HA2 Private Const VK_RCONTROL As Integer = &HA3 Private Const VK_LBUTTON As Integer = &H1 Private Const VK_RBUTTON As Integer = &H2 Private Const VK_MBUTTON As Integer = &H4 Private Const VK_XBUTTON1 As Integer = &H5 Private Const VK_XBUTTON2 As Integer = &H6 Private Const VK_OEM_1 As Integer = &HBA Private Const VK_OEM_PLUS As Integer = &HBB Private Const VK_OEM_COMMA As Integer = &HBC Private Const VK_OEM_MINUS As Integer = &HBD Private Const VK_OEM_PERIOD As Integer = &HBE Private Const VK_OEM_2 As Integer = &HBF Private Const VK_OEM_3 As Integer = &HC0 Private Const VK_C1 As Integer = &HC1 ' Brazilian ABNT_C1 key (not defined in winuser.h). Private Const VK_C2 As Integer = &HC2 ' Brazilian ABNT_C2 key (not defined in winuser.h). Private Const VK_OEM_4 As Integer = &HDB Private Const VK_OEM_5 As Integer = &HDC Private Const VK_OEM_6 As Integer = &HDD Private Const VK_OEM_7 As Integer = &HDE Private Const VK_OEM_8 As Integer = &HDF Private Const VK_OEM_AX As Integer = &HE1 Private Const VK_OEM_102 As Integer = &HE2 Private Const VK_OEM_RESET As Integer = &HE9 Private Const VK_OEM_JUMP As Integer = &HEA Private Const VK_OEM_PA1 As Integer = &HEB Private Const VK_OEM_PA2 As Integer = &HEC Private Const VK_OEM_PA3 As Integer = &HED Private Const VK_OEM_WSCTRL As Integer = &HEE Private Const VK_OEM_CUSEL As Integer = &HEF Private Const VK_OEM_ATTN As Integer = &HF0 Private Const VK_OEM_FINISH As Integer = &HF1 Private Const VK_OEM_COPY As Integer = &HF2 Private Const VK_OEM_AUTO As Integer = &HF3 Private Const VK_OEM_ENLW As Integer = &HF4 Private Const VK_OEM_BACKTAB As Integer = &HF5 #End Region Private Shared Function GetVirtualKeyFromKey(ByVal k As Windows.Forms.Keys) As Integer Dim virtualKey As Integer = 0 Select Case CInt(k) Case Windows.Forms.Keys.Cancel virtualKey = VK_CANCEL Exit Select Case Windows.Forms.Keys.Back virtualKey = VK_BACK Exit Select Case Windows.Forms.Keys.Tab virtualKey = VK_TAB Exit Select Case Windows.Forms.Keys.Clear virtualKey = VK_CLEAR Exit Select Case Windows.Forms.Keys.[Return] virtualKey = VK_RETURN Exit Select Case Windows.Forms.Keys.Pause virtualKey = VK_PAUSE Exit Select Case Windows.Forms.Keys.Capital virtualKey = VK_CAPITAL Exit Select Case Windows.Forms.Keys.KanaMode virtualKey = VK_KANA Exit Select Case Windows.Forms.Keys.JunjaMode virtualKey = VK_JUNJA Exit Select Case Windows.Forms.Keys.FinalMode virtualKey = VK_FINAL Exit Select Case Windows.Forms.Keys.KanjiMode virtualKey = VK_KANJI Exit Select Case Windows.Forms.Keys.Escape virtualKey = VK_ESCAPE Exit Select Case Windows.Forms.Keys.IMEConvert virtualKey = VK_CONVERT Exit Select Case Windows.Forms.Keys.IMENonconvert virtualKey = VK_NONCONVERT Exit Select Case Windows.Forms.Keys.IMEAccept virtualKey = VK_ACCEPT Exit Select Case Windows.Forms.Keys.IMEModeChange virtualKey = VK_MODECHANGE Exit Select Case Windows.Forms.Keys.Space virtualKey = VK_SPACE Exit Select Case Windows.Forms.Keys.Prior virtualKey = VK_PRIOR Exit Select Case Windows.Forms.Keys.[Next] virtualKey = VK_NEXT Exit Select Case Windows.Forms.Keys.[End] virtualKey = VK_END Exit Select Case Windows.Forms.Keys.Home virtualKey = VK_HOME Exit Select Case Windows.Forms.Keys.Left virtualKey = VK_LEFT Exit Select Case Windows.Forms.Keys.Up virtualKey = VK_UP Exit Select Case Windows.Forms.Keys.Right virtualKey = VK_RIGHT Exit Select Case Windows.Forms.Keys.Down virtualKey = VK_DOWN Exit Select Case Windows.Forms.Keys.[Select] virtualKey = VK_SELECT Exit Select Case Windows.Forms.Keys.Print virtualKey = VK_PRINT Exit Select Case Windows.Forms.Keys.Execute virtualKey = VK_EXECUTE Exit Select Case Windows.Forms.Keys.Snapshot virtualKey = VK_SNAPSHOT Exit Select Case Windows.Forms.Keys.Insert virtualKey = VK_INSERT Exit Select Case Windows.Forms.Keys.Delete virtualKey = VK_DELETE Exit Select Case Windows.Forms.Keys.Help virtualKey = VK_HELP Exit Select Case Windows.Forms.Keys.D0 virtualKey = VK_0 Exit Select Case Windows.Forms.Keys.D1 virtualKey = VK_1 Exit Select Case Windows.Forms.Keys.D2 virtualKey = VK_2 Exit Select Case Windows.Forms.Keys.D3 virtualKey = VK_3 Exit Select Case Windows.Forms.Keys.D4 virtualKey = VK_4 Exit Select Case Windows.Forms.Keys.D5 virtualKey = VK_5 Exit Select Case Windows.Forms.Keys.D6 virtualKey = VK_6 Exit Select Case Windows.Forms.Keys.D7 virtualKey = VK_7 Exit Select Case Windows.Forms.Keys.D8 virtualKey = VK_8 Exit Select Case Windows.Forms.Keys.D9 virtualKey = VK_9 Exit Select Case Windows.Forms.Keys.A virtualKey = VK_A Exit Select Case Windows.Forms.Keys.B virtualKey = VK_B Exit Select Case Windows.Forms.Keys.C virtualKey = VK_C Exit Select Case Windows.Forms.Keys.D virtualKey = VK_D Exit Select Case Windows.Forms.Keys.E virtualKey = VK_E Exit Select Case Windows.Forms.Keys.F virtualKey = VK_F Exit Select Case Windows.Forms.Keys.G virtualKey = VK_G Exit Select Case Windows.Forms.Keys.H virtualKey = VK_H Exit Select Case Windows.Forms.Keys.I virtualKey = VK_I Exit Select Case Windows.Forms.Keys.J virtualKey = VK_J Exit Select Case Windows.Forms.Keys.K virtualKey = VK_K Exit Select Case Windows.Forms.Keys.L virtualKey = VK_L Exit Select Case Windows.Forms.Keys.M virtualKey = VK_M Exit Select Case Windows.Forms.Keys.N virtualKey = VK_N Exit Select Case Windows.Forms.Keys.O virtualKey = VK_O Exit Select Case Windows.Forms.Keys.P virtualKey = VK_P Exit Select Case Windows.Forms.Keys.Q virtualKey = VK_Q Exit Select Case Windows.Forms.Keys.R virtualKey = VK_R Exit Select Case Windows.Forms.Keys.S virtualKey = VK_S Exit Select Case Windows.Forms.Keys.T virtualKey = VK_T Exit Select Case Windows.Forms.Keys.U virtualKey = VK_U Exit Select Case Windows.Forms.Keys.V virtualKey = VK_V Exit Select Case Windows.Forms.Keys.W virtualKey = VK_W Exit Select Case Windows.Forms.Keys.X virtualKey = VK_X Exit Select Case Windows.Forms.Keys.Y virtualKey = VK_Y Exit Select Case Windows.Forms.Keys.Z virtualKey = VK_Z Exit Select Case Windows.Forms.Keys.LWin virtualKey = VK_LWIN Exit Select Case Windows.Forms.Keys.RWin virtualKey = VK_RWIN Exit Select Case Windows.Forms.Keys.Apps virtualKey = VK_APPS Exit Select Case Windows.Forms.Keys.Sleep virtualKey = VK_SLEEP Exit Select Case Windows.Forms.Keys.NumPad0 virtualKey = VK_NUMPAD0 Exit Select Case Windows.Forms.Keys.NumPad1 virtualKey = VK_NUMPAD1 Exit Select Case Windows.Forms.Keys.NumPad2 virtualKey = VK_NUMPAD2 Exit Select Case Windows.Forms.Keys.NumPad3 virtualKey = VK_NUMPAD3 Exit Select Case Windows.Forms.Keys.NumPad4 virtualKey = VK_NUMPAD4 Exit Select Case Windows.Forms.Keys.NumPad5 virtualKey = VK_NUMPAD5 Exit Select Case Windows.Forms.Keys.NumPad6 virtualKey = VK_NUMPAD6 Exit Select Case Windows.Forms.Keys.NumPad7 virtualKey = VK_NUMPAD7 Exit Select Case Windows.Forms.Keys.NumPad8 virtualKey = VK_NUMPAD8 Exit Select Case Windows.Forms.Keys.NumPad9 virtualKey = VK_NUMPAD9 Exit Select Case Windows.Forms.Keys.Multiply virtualKey = VK_MULTIPLY Exit Select Case Windows.Forms.Keys.Add virtualKey = VK_ADD Exit Select Case Windows.Forms.Keys.Separator virtualKey = VK_SEPARATOR Exit Select Case Windows.Forms.Keys.Subtract virtualKey = VK_SUBTRACT Exit Select Case Windows.Forms.Keys.[Decimal] virtualKey = VK_DECIMAL Exit Select Case Windows.Forms.Keys.Divide virtualKey = VK_DIVIDE Exit Select Case Windows.Forms.Keys.F1 virtualKey = VK_F1 Exit Select Case Windows.Forms.Keys.F2 virtualKey = VK_F2 Exit Select Case Windows.Forms.Keys.F3 virtualKey = VK_F3 Exit Select Case Windows.Forms.Keys.F4 virtualKey = VK_F4 Exit Select Case Windows.Forms.Keys.F5 virtualKey = VK_F5 Exit Select Case Windows.Forms.Keys.F6 virtualKey = VK_F6 Exit Select Case Windows.Forms.Keys.F7 virtualKey = VK_F7 Exit Select Case Windows.Forms.Keys.F8 virtualKey = VK_F8 Exit Select Case Windows.Forms.Keys.F9 virtualKey = VK_F9 Exit Select Case Windows.Forms.Keys.F10 virtualKey = VK_F10 Exit Select Case Windows.Forms.Keys.F11 virtualKey = VK_F11 Exit Select Case Windows.Forms.Keys.F12 virtualKey = VK_F12 Exit Select Case Windows.Forms.Keys.F13 virtualKey = VK_F13 Exit Select Case Windows.Forms.Keys.F14 virtualKey = VK_F14 Exit Select Case Windows.Forms.Keys.F15 virtualKey = VK_F15 Exit Select Case Windows.Forms.Keys.F16 virtualKey = VK_F16 Exit Select Case Windows.Forms.Keys.F17 virtualKey = VK_F17 Exit Select Case Windows.Forms.Keys.F18 virtualKey = VK_F18 Exit Select Case Windows.Forms.Keys.F19 virtualKey = VK_F19 Exit Select Case Windows.Forms.Keys.F20 virtualKey = VK_F20 Exit Select Case Windows.Forms.Keys.F21 virtualKey = VK_F21 Exit Select Case Windows.Forms.Keys.F22 virtualKey = VK_F22 Exit Select Case Windows.Forms.Keys.F23 virtualKey = VK_F23 Exit Select Case Windows.Forms.Keys.F24 virtualKey = VK_F24 Exit Select Case Windows.Forms.Keys.NumLock virtualKey = VK_NUMLOCK Exit Select Case Windows.Forms.Keys.Scroll virtualKey = VK_SCROLL Exit Select Case Windows.Forms.Keys.LShiftKey virtualKey = VK_LSHIFT Exit Select Case Windows.Forms.Keys.RShiftKey virtualKey = VK_RSHIFT Exit Select Case Windows.Forms.Keys.LControlKey virtualKey = VK_LCONTROL Exit Select Case Windows.Forms.Keys.RControlKey virtualKey = VK_RCONTROL Exit Select Case 164 virtualKey = VK_LMENU Exit Select Case 165 virtualKey = VK_RMENU Exit Select Case Windows.Forms.Keys.BrowserBack virtualKey = VK_BROWSER_BACK Exit Select Case Windows.Forms.Keys.BrowserForward virtualKey = VK_BROWSER_FORWARD Exit Select Case Windows.Forms.Keys.BrowserRefresh virtualKey = VK_BROWSER_REFRESH Exit Select Case Windows.Forms.Keys.BrowserStop virtualKey = VK_BROWSER_STOP Exit Select Case Windows.Forms.Keys.BrowserSearch virtualKey = VK_BROWSER_SEARCH Exit Select Case Windows.Forms.Keys.BrowserFavorites virtualKey = VK_BROWSER_FAVORITES Exit Select Case Windows.Forms.Keys.BrowserHome virtualKey = VK_BROWSER_HOME Exit Select Case Windows.Forms.Keys.VolumeMute virtualKey = VK_VOLUME_MUTE Exit Select Case Windows.Forms.Keys.VolumeDown virtualKey = VK_VOLUME_DOWN Exit Select Case Windows.Forms.Keys.VolumeUp virtualKey = VK_VOLUME_UP Exit Select Case Windows.Forms.Keys.MediaNextTrack virtualKey = VK_MEDIA_NEXT_TRACK Exit Select Case Windows.Forms.Keys.MediaPreviousTrack virtualKey = VK_MEDIA_PREV_TRACK Exit Select Case Windows.Forms.Keys.MediaStop virtualKey = VK_MEDIA_STOP Exit Select Case Windows.Forms.Keys.MediaPlayPause virtualKey = VK_MEDIA_PLAY_PAUSE Exit Select Case Windows.Forms.Keys.LaunchMail virtualKey = VK_LAUNCH_MAIL Exit Select Case Windows.Forms.Keys.SelectMedia virtualKey = VK_LAUNCH_MEDIA_SELECT Exit Select Case Windows.Forms.Keys.LaunchApplication1 virtualKey = VK_LAUNCH_APP1 Exit Select Case Windows.Forms.Keys.LaunchApplication2 virtualKey = VK_LAUNCH_APP2 Exit Select Case Windows.Forms.Keys.OemSemicolon virtualKey = VK_OEM_1 Exit Select Case Windows.Forms.Keys.Oemplus virtualKey = VK_OEM_PLUS Exit Select Case Windows.Forms.Keys.Oemcomma virtualKey = VK_OEM_COMMA Exit Select Case Windows.Forms.Keys.OemMinus virtualKey = VK_OEM_MINUS Exit Select Case Windows.Forms.Keys.OemPeriod virtualKey = VK_OEM_PERIOD Exit Select Case Windows.Forms.Keys.OemQuestion virtualKey = VK_OEM_2 Exit Select Case Windows.Forms.Keys.Oemtilde virtualKey = VK_OEM_3 Exit Select Case 193 virtualKey = VK_C1 Exit Select Case 194 virtualKey = VK_C2 Exit Select Case Windows.Forms.Keys.OemOpenBrackets virtualKey = VK_OEM_4 Exit Select Case Windows.Forms.Keys.OemPipe virtualKey = VK_OEM_5 Exit Select Case Windows.Forms.Keys.OemCloseBrackets virtualKey = VK_OEM_6 Exit Select Case Windows.Forms.Keys.OemQuotes virtualKey = VK_OEM_7 Exit Select Case Windows.Forms.Keys.Oem8 virtualKey = VK_OEM_8 Exit Select Case Windows.Forms.Keys.OemBackslash virtualKey = VK_OEM_102 Exit Select Case 229 virtualKey = VK_PROCESSKEY Exit Select Case 240 ' DbeAlphanumeric virtualKey = VK_OEM_ATTN ' VK_DBE_ALPHANUMERIC Exit Select Case 241 ' DbeKatakana virtualKey = VK_OEM_FINISH ' VK_DBE_KATAKANA Exit Select Case 242 ' DbeHiragana virtualKey = VK_OEM_COPY ' VK_DBE_HIRAGANA Exit Select Case 243 ' DbeSbcsChar virtualKey = VK_OEM_AUTO ' VK_DBE_SBCSCHAR Exit Select Case 244 ' DbeDbcsChar virtualKey = VK_OEM_ENLW ' VK_DBE_DBCSCHAR Exit Select Case 245 'No Key here. ' DbeRoman virtualKey = VK_OEM_BACKTAB ' VK_DBE_ROMAN Exit Select Case Windows.Forms.Keys.Attn ' DbeNoRoman virtualKey = VK_ATTN ' VK_DBE_NOROMAN Exit Select Case Windows.Forms.Keys.Crsel ' DbeEnterWordRegisterMode virtualKey = VK_CRSEL ' VK_DBE_ENTERWORDREGISTERMODE Exit Select Case Windows.Forms.Keys.Exsel ' EnterImeConfigureMode virtualKey = VK_EXSEL ' VK_DBE_ENTERIMECONFIGMODE Exit Select Case Windows.Forms.Keys.EraseEof ' DbeFlushString virtualKey = VK_EREOF ' VK_DBE_FLUSHSTRING Exit Select Case Windows.Forms.Keys.Play ' DbeCodeInput virtualKey = VK_PLAY ' VK_DBE_CODEINPUT Exit Select Case Windows.Forms.Keys.Zoom ' DbeNoCodeInput virtualKey = VK_ZOOM ' VK_DBE_NOCODEINPUT Exit Select Case Windows.Forms.Keys.NoName ' DbeDetermineString virtualKey = VK_NONAME ' VK_DBE_DETERMINESTRING Exit Select Case Windows.Forms.Keys.Pa1 ' DbeEnterDlgConversionMode virtualKey = VK_PA1 ' VK_ENTERDLGCONVERSIONMODE Exit Select Case Windows.Forms.Keys.OemClear virtualKey = VK_OEM_CLEAR Exit Select Case Else virtualKey = 0 Exit Select End Select Return virtualKey End Function #End Region Private Enum MapType As UInteger MAPVK_VK_TO_VSC = &H0 MAPVK_VSC_TO_VK = &H1 MAPVK_VK_TO_CHAR = &H2 MAPVK_VSC_TO_VK_EX = &H3 End Enum Private Shared Function ToUnicode(wVirtKey As UInteger, wScanCode As UInteger, lpKeyState As Byte(), pwszBuff As System.Text.StringBuilder, cchBuff As Integer, wFlags As UInteger) As Integer End Function Private Shared Function GetKeyboardState(lpKeyState As Byte()) As Boolean End Function Private Shared Function MapVirtualKey(uCode As UInteger, uMapType As MapType) As UInteger End Function ''' ''' Returns chars representing the keys pressed on a keyboard. ''' ''' The key. Returns nothing when no keypress was detected. Public Shared Function GetCharFromKey(key As Keys) As Char? Return GetCharFromKey(CType(key, Windows.Forms.Keys)) End Function ''' ''' Returns chars representing the keys pressed on a keyboard. ''' ''' The key. Returns nothing when no keypress was detected. Public Shared Function GetCharFromKey(key As Windows.Forms.Keys) As Char? Dim ch As Char? = Nothing Dim virtualKey As Integer = GetVirtualKeyFromKey(key) Dim keyboardState As Byte() = New Byte(255) {} GetKeyboardState(keyboardState) Dim scanCode As UInteger = MapVirtualKey(CUInt(virtualKey), MapType.MAPVK_VK_TO_VSC) Dim stringBuilder As New System.Text.StringBuilder(2) Dim result As Integer = ToUnicode(CUInt(virtualKey), scanCode, keyboardState, stringBuilder, stringBuilder.Capacity, 0) Select Case result Case -1 Exit Select Case 0 Exit Select Case 1 ch = stringBuilder(0) Case Else ch = stringBuilder(0) End Select Return ch End Function End Class