public bool TryGetCharFromKeyboardState(KeyCode virtualKeyCode, int scanCode, ToUnicodeExFlags fuState, KeyboardLayout Layout, out string?chars)
        {
            chars = default;

            var Keyboard = KeyboardState.Current();
            var isDead   = false;

            if (Keyboard[KeyCode.LShift].IsDown() || Keyboard[KeyCode.RShift].IsDown())
            {
                Keyboard[KeyCode.Shift] |= KeyboardKeyState.KeyDown;
            }

            if (Keyboard[KeyCode.CapsLock].IsToggled())
            {
                Keyboard[KeyCode.CapsLock] |= KeyboardKeyState.Toggled;
            }

            //var ConversionStatus = ToUnicodeEx((KeyCode)virtualKeyCode, scanCode, currentKeyboardState, pwszBuff, pwszBuff.Capacity, fuState, Layout.Handle);

            var ConversionStatus = ToUnicodeEx(Layout, Keyboard, fuState, virtualKeyCode, scanCode, out var Characters);

            switch (ConversionStatus)
            {
            case ToUnicodeExStatus.DeadKey:
                isDead = true;
                ClearKeyboardBuffer(virtualKeyCode, scanCode, Layout);
                break;

            case ToUnicodeExStatus.NoTranslation:
                break;

            case ToUnicodeExStatus.Success:
                chars = Characters;
                break;
            }

            if (lastVirtualKeyCode == 0 || !lastIsDead)
            {
                lastScanCode       = scanCode;
                lastVirtualKeyCode = virtualKeyCode;
                lastIsDead         = isDead;
                lastKeyState       = Keyboard.Clone();
            }
            else if (chars is {})
        /// <summary>
        ///     Translates a virtual key to its character equivalent using the current keyboard layout
        /// </summary>
        /// <param name="virtualKeyCode"></param>
        /// <param name="scanCode"></param>
        /// <param name="fuState"></param>
        /// <param name="chars"></param>
        /// <returns></returns>
        public bool TryGetCharFromKeyboardState(KeyCode virtualKeyCode, int scanCode, ToUnicodeExFlags fuState, out string?chars)
        {
            var Layout = KeyboardLayout.Current(); //get the active keyboard layout

            return(TryGetCharFromKeyboardState(virtualKeyCode, scanCode, fuState, Layout, out chars));
        }