|
|
![]() |
|
||
|
|
|||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||
| Visual Basic System Services SetKeyboardState: Activating CapsLock and NumLock on Win9x |
||
| Posted: | Thursday December 26, 1996 | |
| Updated: | Monday December 26, 2011 | |
| Applies to: | VB4-32, VB5, VB6 | |
| Developed with: | VB5, Windows 95 | |
| OS restrictions: | None | |
| Author: | VBnet - Randy Birch | |
|
Related: |
keybd_event: Activating CapsLock, NumLock, ScrollLock and PrintScreen (NT or later) BitBlt: Mimicking the PrintScreen Function BitBlt: Mimicking PrintScreen to Create a 'PrintForm' OleCreatePictureIndirect: Mimicking PrintScreen Using OLE |
|
| Prerequisites |
| VB version supporting the Byte data type. Although this code will toggle the actual keyboard state on a NT/2000 system, it will not toggle the corresponding keyboard lights. See the link above for NT-specific code. |
|
|
| BAS Module Code |
|
|
| Place the following code into the general declarations area of a bas module: |
|
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Const VK_CAPITAL = &H14 Public Type KeyboardBytes kbByte(0 To 255) As Byte End Type Public kbArray As KeyboardBytes Public Declare Function GetKeyState Lib "user32" _ (ByVal nVirtKey As Long) As Long Public Declare Function GetKeyboardState Lib "user32" _ (kbArray As KeyboardBytes) As Long Public Declare Function SetKeyboardState Lib "user32" _ (kbArray As KeyboardBytes) As Long |
| Form Code |
|
|
| On a form, add a 3 command buttons (Command1, Command2, Command3) and a label (Label1). Add the following code to the form: |
|
|
Option Explicit
Private Sub Form_Load()
Label1.Caption = IIf(CapsLock() = 1, "On", "Off")
End Sub
Function CapsLock() As Boolean
CapsLock = GetKeyState(VK_CAPITAL) And 1 = 1
End Function
Private Sub Command1_Click()
'toggle key state on each press
GetKeyboardState kbArray
kbArray.kbByte(VK_CAPITAL) = IIf(kbArray.kbByte(VK_CAPITAL) = 1, 0, 1)
SetKeyboardState kbArray
Label1.Caption = IIf(CapsLock() = 1, "On", "Off")
End Sub
Private Sub Command2_Click()
'turn capslock on
GetKeyboardState kbArray
kbArray.kbByte(VK_CAPITAL) = 1
SetKeyboardState kbArray
Label1.Caption = IIf(CapsLock() = 1, "On", "Off")
End Sub
Private Sub Command3_Click()
'turn capslock off
GetKeyboardState kbArray
kbArray.kbByte(VK_CAPITAL) = 0
SetKeyboardState kbArray
Label1.Caption = IIf(CapsLock() = 1, "On", "Off")
End Sub |
| Comments |
| The keyboard APIs for VB4-16 and VB3 do not support the
byte data type. By changing the Windows constant to VK_NUMLOCK = &H90, you can use the above method to activate the NumLock key instead. |
|
|
|
|
|
|||||
|
|||||
|
|
|||||
|
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |