определите, выключен ли NumLock, и всегда включайте его снова - PullRequest
0 голосов
/ 02 июня 2009

Что такое метод определения, если NumLock выключен, и как всегда автоматически включать его, когда мое приложение VB APP работает?

EDIT: Мое приложение - это специальное приложение, работающее на выделенном компьютере с внешним устройством Numpad.

другой вариант - принять клавиши со стрелками NUMPAD (и т. Д.) И конвертировать их в числа на лету, это возможно? (например, игнорировать ситуацию отключения numlock и вести себя, как numlock включен)

Ответы [ 4 ]

3 голосов
/ 02 июня 2009

Я не уверен, как именно вы это делаете на vb.net (быстрый поиск в Google http://support.microsoft.com/kb/177674),), но, вообще говоря, меняются такие изменения в настройках всей машины: пользователи привыкли к своим индивидуальным предпочтениям Состояние ключа numlock (или capslock - или как угодно) ... и вы переопределяете его.

Это будет действительно раздражать меня.

Тем не менее, в условиях, когда ваше приложение работает единственно (например, программное обеспечение для POS, программное обеспечение для управления медицинским кабинетом и т. Д.), Это может быть в порядке.

2 голосов
/ 02 июня 2009

Физически удалить ключ NUMPAD?

1 голос
/ 02 июня 2009
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Const KEYEVENTF_KEYUP = &H2
    Const VK_NUMLOCK = &H90
    Const KEYEVENTF_EXTENDEDKEY = &H1
    Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal ByValnVirtKey As Integer) As Short

 Private Sub numlockON()
        keybd_event(VK_NUMLOCK, 0, 0, 0) ' Press NUMLOCK key down
        keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0) ' Release it
    End Sub

If Not GetKeyState(VK_NUMLOCK) Then numlockON()
0 голосов
/ 23 марта 2018
Public Const VK_NUMLOCK = &H90
Declare Function GetKeyState Lib "user32" Alias "GetKeyState" _
(ByVal ByValnVirtKey As Integer) As Short

Private Sub me_keyDown(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.NumLock And Not NLKey Then
        If Not GetKeyState(VK_NUMLOCK) Then
            e.Handled = True
            NumlOn.Start()
            Exit Sub
        End If
    End If
End sub

Private Sub NumlOn_Tick(sender As Object, e As EventArgs) Handles NumlOn.Tick
    NLKey = True
    If Not GetKeyState(VK_NUMLOCK) Then numlockON()
    Application.DoEvents()
    NumlOn.Stop()
    NLKey = False
End Sub
...