#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)