PRB: SendKeys Does Not Work with NumLock or Caplock

Article translations Article translations
Article ID: 192273 - View products that this article applies to.
This article was previously published under Q192273
Expand all | Collapse all

On This Page

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:
177674 : HOWTO: Toggle the NUM LOCK, CAPS LOCK, and SCROLL LOCK Keys

Properties

Article ID: 192273 - Last Review: May 12, 2003 - Revision: 2.0
APPLIES TO
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
Keywords: 
kbprb kbcode KB192273

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com