Visual Basic

Sử dụng API điều khiển tình trạng phím bấm trên bàn phím

27/12/2013 01:03

Trong VB6,viết đoạn mã thế nào để điều khiển các phím Num Lock,Caps Lock,Scroll Lock theo ý của mình thông qua chương trình viết bằng VB6? Chẳng hạn bật tắt đèn Num Lock, Caps Lock, Scroll Lock thông qua việc bấm các Button.

Ta phải sử dụng các hàm API có sẵn của Windows, không thể sử dụng lệnh SendKeys được. Ví dụ sau đây minh họa cách kiểm tra tình trạng các phím Num Lock,Caps Lock,Scroll Lock và cách bật/tắt chúng bằng hàm API.

Tạo project mới, trên form mặc định lần lượt vẽ 4 nút lệnh có tên: cmdCapslock, cmdNumlock, cmdScrollLockcmdViewKeyState như sau:

Rồi gõ đoạn mã sau đây vào form:

Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Integer) As Integer

' Tên hàm này chỉ được viết chữ thường:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const VK_CAPITAL = 20
Const VK_NUMLOCK = 144
Const VK_SCROLL = 145
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2

Private Sub cmdCapslock_Click()

' Nhấn phím

keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0

' và thả phím ra

keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0

End Sub

Private Sub cmdNumlock_Click()

keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0

keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0

End Sub

Private Sub cmdScrollLock_Click()

keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0

keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0

End Sub

Private Sub cmdViewKeyState_Click()

If GetKeyState(VK_NUMLOCK) > 0 Then
MsgBox ("NumLock is On")
Else
MsgBox ("NumLock is Off")
End If

If GetKeyState(VK_CAPITAL) > 0 Then
MsgBox ("Caps Lock is On")
Else
MsgBox ("Caps Lock is Off")
End If

If GetKeyState(VK_SCROLL) > 0 Then
MsgBox ("Scroll Lock is On")
Else
MsgBox ("Scroll Lock is Off")
End If

End Sub

Với cách làm này, bạn cũng có thể bật/tắt cũng như kiểm tra tình trạng phím Insert với hằng khai báo cho phím như sau:

Const VK_INSERT = 45

Đàm Văn Chương
Ý kiến bạn đọc (0)
Tên   Email

Lên đầu trang