PRB: SendKeys Does Not Work with NumLock or Caplock (192273)



The information in this article applies to:

  • Microsoft Visual Basic Learning Edition for Windows 5.0
  • Microsoft Visual Basic Learning Edition for Windows 6.0
  • Microsoft Visual Basic Professional Edition for Windows 5.0
  • Microsoft Visual Basic Professional Edition for Windows 6.0
  • Microsoft Visual Basic Enterprise Edition for Windows 5.0
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic Standard Edition, 32-bit, for Windows 4.0

This article was previously published under Q192273

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


Modification Type:MajorLast Reviewed:5/12/2003
Keywords:kbcode kbprb KB192273