|
|
![]() |
|
||
|
|
|||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||
| Visual Basic System Services Activating CapsLock, NumLock, ScrollLock and PrintScreen on NT-Based Systems |
||
| Posted: | Friday July 10, 1998 | |
| Updated: | Monday December 26, 2011 | |
| Applies to: | VB4-32, VB5, VB6 | |
| Developed with: | VB6, Windows NT4 | |
| OS restrictions: | Windows NT4, Windows 2000, Windows XP | |
| Author: | VBnet - Randy Birch, Stoil Marinov | |
|
Related: |
SetKeyboardState: Activating CapsLock and NumLock on Win9x 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, WinNT4/Win2000. |
|
|
While
the Get/SetKeyboardState APIs, when used on a WinNT system, will toggle the *state* of capslock or numlock, unlike Win9x, the
keyboard lights remain unaffected by the call. This code, using the keybd_event API, provides the same functionality as the SetKeyboardState
version, and in addition toggles the keyboard state lights. It is untested in Win9x (may even work there!), but works perfectly on NT.Unlike the other examples listed under related topics, using the keybd_event API for PrintScreen causes the screen to go to the clipboard, where this demo then retrieves that bitmap into a image control. Thanks go out to Stoil Marinov for posting the NT *lock method in the msnews groups. |
| BAS Module Code |
| None. |
|
|
| Form Code |
|
|
| On a form, add a five command buttons in a control array (Command(0) - Command(4)) and an Image control (Image1). as shown, the image control's Stretch property is True. Add the following code to the form: |
|
|
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. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 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 Function MapVirtualKey Lib "user32" _
Alias "MapVirtualKeyA" _
(ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Function Sleep Lib "kernel32" _
(ByVal dwmilliseconds As Long) As Long
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const VK_SCROLL = &H91
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0: NTToggleKeyCaps
Case 1: NTToggleKeyNumlock
Case 2: NTToggleKeyScroll
Case 3: NTToggleKeyPrintScreen
'because Windows may still be drawing to
'the clipboard when GetData or Clear is
'called, a 521 - "Can't open clipboard'
'error may be generated. The error handler
'pauses the app for 1/2 second while
'Windows finishes, then tries again.
DoEvents
On Local Error GoTo command_error
Image1.Picture = Clipboard.GetData(vbCFBitmap)
Clipboard.Clear
On Local Error GoTo 0
Case Else
Unload Me
Exit Sub
End Select
'let the user test the change
Text1.SetFocus
Exit Sub
command_error:
Call Sleep(250)
Resume Next
End Sub
Private Sub NTToggleKeyPrintScreen()
Call keybd_event(vbKeySnapshot, _
MapVirtualKey(vbKeySnapshot, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(vbKeySnapshot, MapVirtualKey(vbKeySnapshot, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End Sub
Private Sub NTToggleKeyNumlock()
Call keybd_event(vbKeyNumlock, _
MapVirtualKey(vbKeyNumlock, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(vbKeyNumlock, MapVirtualKey(vbKeyNumlock, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End Sub
Private Sub NTToggleKeyCaps()
Call keybd_event(vbKeyCapital, _
MapVirtualKey(vbKeyCapital, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(vbKeyCapital, MapVirtualKey(vbKeyCapital, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End Sub
Private Sub NTToggleKeyScroll()
Call keybd_event(VK_SCROLL, _
MapVirtualKey(VK_SCROLL, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(VK_SCROLL, MapVirtualKey(VK_SCROLL, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End Sub
Private Sub Text1_GotFocus()
With Text1
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub |
| Comments |
|
|
|
|
|
|||||
|
|||||
|
|
|||||
|
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |