Как мне правильно фиксировать удары клавиатуры C # .NET

#c# #.net #keyboard #keystroke

#c# #.net #клавиатура #нажатие клавиши

Вопрос:

Я использую этот код

     KeysConverter keyConverter = new KeysConverter();
    String text = "";

    while (true)
    {
        Thread.Sleep(10);
        for (Int32 i = 0; i < 255; i  )
        {
            int key = GetAsyncKeyState(i);
            if (key == 1 || key == -32767)
            {
                text = keyConverter.ConvertToString(i);
                using (StreamWriter sw = File.AppendText(path))
                {
                    sw.WriteLine(text);
                }
            }
        }
    }
  

для записи клавиш и сохранения их в файл.

Прямо сейчас, если я запускаю приложение и набираю заглавную букву A, оно печатается, shift lshift a и это не то, что я хочу, чтобы оно делало. Я хочу упростить его, просто распечатав заглавную букву A

Комментарии:

1. Для этого есть разные способы. В зависимости от того, является ли приложение WPF или ConsoleApp или WinForm или ASP.NET MVC (т.е. в knockout вы можете использовать valueUpdate: ‘keyup’). Я предлагаю, чтобы вы могли начать с поиска того, что является «событием» в общих парадигмах программирования.

2. Это WPF. Итак, вы предлагаете, чтобы я привязал keyevent, например, KeyDown?

3. Другая проблема связана с потоком ввода. Скажите, что, если входной строкой является «ABCD<backspace/><backspace/><backspace/>». Вы собираетесь получить «A» или «ABCD»? Если это простой элемент управления, просто подпишитесь на KeyDown или KeyUp, в зависимости от того, каким вы ожидаете поведения при вводе. Если это элемент управления framework в вашем проекте, попробуйте привязку команд.

4. Вы можете отфильтровать результат, выбрав KeyEventArgs . Нажмите, чтобы вы не получили ctrl / shift / alt / delete / pgup / pgdns.