GetAsyncKeyState работает у меня, но не на компьютере моих друзей? Как я могу исправить?

#c#

#c#

Вопрос:

Для программы, которую я создаю, у нее есть цикл в отдельном потоке, который проверяет нажатие клавиши с использованием GetAsyncKeyState, это, кажется, отлично работает для меня и пары друзей, но для одного друга это не работает… Я посмотрел настройки языка его клавиатуры, они кажутся правильными, но я не могу понять, почему моя программа не может обнаружить нажатия клавиш.

Пробовал менять языки клавиатуры, пробовал на экранной клавиатуре и пробовал использовать (‘o’) вместо номера ascii для буквы o

 if (GetAsyncKeyState(79) > 0)
{
    if (gunDelay < 5000)
    {
        Thread.Sleep(200);
        gunDelay = gunDelay   30;
        Delegate rateFire = new Delegate(RateofFire);
        this.Invoke(rateFire);
        gunDelayChange = true;
    }
}
  

Должно работать так же, как у меня, изменяя значение, но его всегда ломается, это точно такая же программа, ничем не отличающаяся от моей.

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

1. Это может быть параметр безопасности или программное обеспечение, блокирующее его. Программное обеспечение, которое постоянно проверяет состояние клавиатуры, иногда рассматривается как вредоносная активность (например, кейлоггер). В конце концов, что-то подобное можно было бы использовать, скажем, для прослушивания имен пользователей и паролей, вводимых в веб-браузере.

2. Если это для игры, которая является или может быть полноэкранной, то GetAsyncKeyState() не будет работать. Если это так, вам нужно изучить возможность реализации низкоуровневого подключения клавиатуры вместо этого. Кроме того, вы также неправильно это проверяете. Чтобы проверить, действительно ли клавиша нажимается вниз (а не находится в переходном состоянии и т.д.), Вам нужно выполнить: if(GetAsyncKeyState(79) amp; 0x8000 == 0x8000) .