Status of NumLock, ScrollLock and CapsLock

G

Guest

Good morning,

I'm SURE I found the answer to this on here somewhere, but I can't find it
now.
Can anybody please tell me how to determine the status of the lock keys -
that is, whether NumLock, ScrollLock and capsLock are on or off?

Thanks in advance

Pete
 
A

Andrew Taylor

Pete,

Search this group for GetKeyboardState and you'll find several
useful postings.
 
G

Guest

Andrew,
Interestingly enough, if I do, the only thread that's returned is this one.
Am I spelling it correctly - all one word?
Regards
Pete
 
G

Guest

Dave,

Thanks for the advice, but the links seem to go somewhere that doesn't
relate to doing it in Excel,
and I'm not clever enough to adapt it. Either that, or I'm just not used to
using Google groups properly! :O)

Pete
 
A

Ardus Petus

Const VK_CAPITAL = &H14
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type

Private Declare Function GetKeyboardState Lib "user32" (kbArray As
KeyboardBytes) As Long


Sub testkb()
Dim kb As KeyboardBytes
GetKeyboardState kb
MsgBox _
"NumLock: " & kb.kbByte(VK_NUMLOCK) & vbLf & _
"ScrollLock : " & kb.kbByte(VK_SCROLL) & vbLf & _
"CapslLock : " & kb.kbByte(VK_CAPITAL)
End Sub

HTH
 
D

Dave Peterson

It's a link to a Google Groups Search page. Click on a few of those links and
you'll see lots of suggestions...


I've saved this from other posts.

Option Explicit
' Code from "VBA Developer's Handbook" (Sybex, 1997):
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) _
As Integer
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) _
As Long
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) _
As Long
Function GetCapslock() As Boolean
' Return or set the Capslock toggle
GetCapslock = CBool(GetKeyState(vbKeyCapital) And 1)
End Function
Function GetNumlock() As Boolean
' Return or set the Numlock toggle.
GetNumlock = CBool(GetKeyState(vbKeyNumlock) And 1)
End Function
Sub SetCapslock(Value As Boolean)
' Return or set the Capslock toggle.
Call SetKeyState(vbKeyCapital, Value)
End Sub
Sub SetNumlock(Value As Boolean)
' Return or set the Numlock toggle.
Call SetKeyState(vbKeyNumlock, Value)
End Sub
Private Sub SetKeyState(intKey As Integer, fTurnOn As Boolean)
Dim abytBuffer(0 To 255) As Byte
GetKeyboardState abytBuffer(0)
abytBuffer(intKey) = CByte(Abs(fTurnOn))
SetKeyboardState abytBuffer(0)
End Sub
Sub Caps_on()
If GetCapslock = False Then Call SetKeyState(vbKeyCapital, True)
End Sub
Sub Caps_Off()
If GetCapslock = True Then Call SetKeyState(vbKeyCapital, False)
End Sub
Sub auto_open()
Application.OnKey "{CAPSLOCK}", "TurnItOff"
End Sub
Sub auto_close()
Application.OnKey "{CAPSLOCK}"
End Sub
Sub TurnItOff()
If GetCapslock = True Then
Call SetKeyState(vbKeyCapital, False)
Beep
End If
End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top