Article: Q192273
Product(s): Microsoft Visual Basic for Windows
Version(s): WINDOWS:4.0,5.0,6.0
Operating System(s):
Keyword(s): kbcode kbnokeyword kbVBp400 kbVBp500 kbVBp600 kbGrpDSVB
Last Modified: 11-JAN-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual Basic Learning Edition for Windows, versions 5.0, 6.0
- Microsoft Visual Basic Professional Edition for Windows, versions 5.0, 6.0
- Microsoft Visual Basic Enterprise Edition for Windows, versions 5.0, 6.0
- Microsoft Visual Basic Standard Edition, 32-bit, for Windows, version 4.0
-------------------------------------------------------------------------------
SYMPTOMS
========
Using SendKeys to change the state of {CAPSLOCK} or {NUMLOCK} is not effective.
CAUSE
=====
Toggling {CAPSLOCK} or {NUMLOCK} with the SendKeys statement is only in effect
for the continuous subsequent keys sent by SendKeys. The state of {CAPSLOCK} or
{NUMLOCK} is reset when Visual Basic yields to other processes. For example,
this occurs when the SendKeys statement's Wait parameter is set to "True", or
when a DoEvents statement is executed.
RESOLUTION
==========
Use SendKeys to toggle {CAPSLOCK} or {NUMLOCK} only when sending a series of
keys continuously in a single or multiple number of SendKeys statements. To
toggle the {CAPSLOCK} or {NUMLOCK} permanently:
1. Use the KeyState control that comes with Visual Basic 4.0.
- or -
2. Use the Win32 API. See the article in the References section for details.
STATUS
======
This behavior is by design.
MORE INFORMATION
================
Steps to Reproduce Behavior
---------------------------
1. Start a new Standard EXE project. From1 is created by default.
2. Add a TextBox to Form1 and paste the following code in the code Window:
Private Sub Text1_Click()
SendKeys "s"
SendKeys "{CAPSLOCK}" ' Turn on the CapsLock
SendKeys "o" ' will be printed in caps
For i = 0 To 10
SendKeys Chr(Asc("a") + i) 'will be printed in caps
Next
'DoEvents ' uncommenting this will print next line in smalls
SendKeys "o" ' will be printed in caps
SendKeys "{CAPSLOCK}" ' Turn off the caps lock
SendKeys "o" ' Will be printed in smalls
End Sub
3. Turn off the Caps Lock. Run the project. Note that the SendKeys work as
expected.
4. Un-comment the DoEvents statement. Run the project. The Caps Lock is reset
after the DoEvents call.
5. In any SendKeys statement after SendKeys "{CAPSLOCK}", pass "True" as the
second parameter. The state of Caps Lock is reset after that statement.
REFERENCES
==========
For additional information, please see the following article in the Microsoft
Knowledge Base:
Q177674 : HOWTO: Toggle the NUM LOCK, CAPS LOCK, and SCROLL LOCK Keys
======================================================================
Keywords : kbcode kbnokeyword kbVBp400 kbVBp500 kbVBp600 kbGrpDSVB
Technology : kbVBSearch kbAudDeveloper kbZNotKeyword6 kbZNotKeyword2 kbVB500Search kbVB600Search kbVBA500 kbVBA600 kbVB500 kbVB600 kbVB400Search kbVB400
Version : WINDOWS:4.0,5.0,6.0
Issue type : kbprb
=============================================================================