Microsoft KB Archive/192273

= PRB: SendKeys Does Not Work with NumLock or Caplock =

Article ID: 192273

Article Last Modified on 5/12/2003

-

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

-



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 -
 * 1) Use the Win32 API. See the article in the References section for details.



STATUS
This behavior is by design.



Steps to Reproduce Behavior
 Start a new Standard EXE project. From1 is created by default.  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

 Turn off the Caps Lock. Run the project. Note that the SendKeys work as expected. Un-comment the DoEvents statement. Run the project. The Caps Lock is reset after the DoEvents call. In any SendKeys statement after SendKeys "{CAPSLOCK}", pass "True" as the second parameter. The state of Caps Lock is reset after that statement.</li></ol>

<div class="references_section">