Определите, выключен ли NumLock, и всегда включайте его снова
Что такое метод определения, если NumLock выключен, и как всегда автоматически включать его, когда мое приложение VB APP работает?
РЕДАКТИРОВАТЬ: Мое приложение является выделенным приложением, работающим на выделенном компьютере с внешним устройством Numpad.
другой вариант - принять клавиши со стрелками NUMPAD (и т. д.) и конвертировать их в числа на лету, возможно ли это? (например, игнорировать ситуацию отключения numlock и вести себя, как numlock включен)
4 ответа
Я не уверен, как вы делаете это конкретно в vb.net (быстрый Google нашел http://support.microsoft.com/kb/177674), но, вообще говоря, изменение настроек на всей машине, как это, осуждается: пользователи привыкли к их индивидуальному предпочтению состояния ключа numlock (или capslock - или как угодно)... и вы переопределяете его.
Это действительно раздражало бы меня.
Тем не менее, в условиях, когда ваше приложение работает единственно (например, программное обеспечение для POS, программное обеспечение для управления медицинским офисом и т. Д.), Это может быть нормально.
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()
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