LifeAct
@LifeAct
Создаем и раскручиваем, не ставим на конвейер

Как определить виртуальный код клавиши для ru раскладки?

Всем привет!

Вот так получаю любую нажатую клавишу на клавиатуре:

private void OnKeyPressed(object sender, GlobalKeyboardHookEventArgs e)
    {          

        KeysConverter kc = new KeysConverter();


        if (e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyDown)
        {
            GrabbedKeys += kc.ConvertToString(e.KeyboardData.VirtualCode);
            return;

        }

        if (e.KeyboardData.VirtualCode != GlobalKeyboardHook.VkSnapshot)
            return;          
    }


и класс для работы с вин32
class GlobalKeyboardHookEventArgs : HandledEventArgs
{
    public GlobalKeyboardHook.KeyboardState KeyboardState { get; private set; }
    public GlobalKeyboardHook.LowLevelKeyboardInputEvent KeyboardData { get; private set; }

    public GlobalKeyboardHookEventArgs(
        GlobalKeyboardHook.LowLevelKeyboardInputEvent keyboardData,
        GlobalKeyboardHook.KeyboardState keyboardState)
    {
        KeyboardData = keyboardData;
        KeyboardState = keyboardState;
    }
}

//Based on https://gist.github.com/Stasonix
class GlobalKeyboardHook : IDisposable
{
    public event EventHandler<GlobalKeyboardHookEventArgs> KeyboardPressed;

    public GlobalKeyboardHook()
    {
        _windowsHookHandle = IntPtr.Zero;
        _user32LibraryHandle = IntPtr.Zero;
        _hookProc = LowLevelKeyboardProc; // we must keep alive _hookProc, because GC is not aware about SetWindowsHookEx behaviour.

        _user32LibraryHandle = LoadLibrary("User32");
        if (_user32LibraryHandle == IntPtr.Zero)
        {
            int errorCode = Marshal.GetLastWin32Error();
            throw new Win32Exception(errorCode, $"Failed to load library 'User32.dll'. Error {errorCode}: {new Win32Exception(Marshal.GetLastWin32Error()).Message}.");
        }
       .............


при любой раскладке, если я нажимаю на 's', это и фиксируется, а есть ли стандартный способ вывести клавишу в зависимости от раскладки, например нажал я 'ы' в ру раскладке и получил 'ы' а не s?

Или только самому писать какой то велосипед?
  • Вопрос задан
  • 215 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы