Есть ли ограничение на количество нажатий клавиш VB.NET можно ли зарегистрироваться одновременно?

#vb.net #vb.net-2010 #keypress

#vb.net #vb.net-2010 #нажатие клавиши

Вопрос:

Итак, в настоящее время я разрабатываю свой вычислительный проект уровня A, и мне нужно знать, если VB.NET может регистрировать несколько нажатий клавиш одновременно, например, F amp; J, и иметь возможность обрабатывать их как отдельные нажатия клавиш. Мне может понадобиться до 4 нажатий клавиш одновременно, поэтому, если VB.NET не могу этого сделать, моя программа будет ограничена (хотя и незначительно).

Если это возможно, я просто рассматриваю это так, как если бы они не были нажаты одновременно, и проверяю обе клавиши по отдельности, или есть специальный способ обнаружения этого?

Заранее спасибо.

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

1. не уверен, что VB имеет какое-либо отношение к, это ваш драйвер клавиатуры и аппаратное обеспечение, которые отвечают за это. например, некоторые игровые клавиатуры могут обрабатывать 10 нажатий клавиш одновременно, стандартные клавиатуры могут обрабатывать от 3 до 5 нажатий.

2. Я согласен с комментарием выше. Ваше приложение получит все клавиши, зарегистрированные ПК. Вам нужно будет отслеживать, какие клавиши нажаты в вашем приложении.

3. Это свойство клавиатуры, называемое «опрокидывание» . Обычно вы можете рассчитывать только на 3 клавиши, после этого выпадают дешевые. Нет никакого способа узнать, кроме как методом проб и ошибок, это зависит от того, где ключи расположены в матрице. Или путем тщательной покупки. Размер очереди не имеет к этому никакого отношения.

4. спасибо, ребята, это полезно, 3 будет достаточно для моего проекта, и приятно знать, что мне не нужно делать ничего более особенного, чем я уже делал, чтобы поймать их.

Ответ №1:

Вы можете отслеживать, какие клавиши вы нажимали и отпускали.

Создайте новый проект winforms и добавьте Метку. Это должно дать вам хорошую отправную точку.

 Public Class Form1

    Private pressedKeys As New List(Of System.Windows.Forms.Keys)()

    Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
        If Not pressedKeys.Contains(e.KeyCode) Then pressedKeys.Add(e.KeyCode)
        printCurrentKeys()
    End Sub

    Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
        If pressedKeys.Contains(e.KeyCode) Then pressedKeys.Remove(e.KeyCode)
        printCurrentKeys()
    End Sub

    Private Sub printCurrentKeys()
        If pressedKeys.Count > 0 Then
            Me.Label1.Text = pressedKeys.
                Select(Of String)(Function(k) Chr(k)).
                Aggregate(Function(s1, s2) s1 amp; ", " amp; s2)
        Else
            Me.Label1.Text = ""
        End If
    End Sub

End Class
  

введите описание изображения здесь

(Вышеуказанные 8 клавиш стали возможными благодаря моей клавиатуре с защитой от ореолов, Sidewinder X4.)

Ответ №2:

Предположительно, вы можете проверить в реестре

 Dim KeyboardDataQueueSize = My.Computer.Registry.GetValue(
            "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesKbdclassParameters", 
            "KeyboardDataQueueSize", Nothing)
  

https://www.google.com/search ?q= клавиатура буфер размер