Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically disable caps lock

I'm using SendKeys in an automation program for work. I've been plodding along, and am now trying to iron out all the bugs that I've created :-)

One of which, is that when I used SendKeys.Send("Test"), if the CapsLock is on, it will produce "tEST" as opposed to "Test".

I've used the following code to attempt to detect the capsLock state, and toggle it if necessary:

bool tmp = Control.IsKeyLocked(Keys.CapsLock);
if (tmp)
{
     keybd_event(0x14, 0x45, KEYEVENTF_EXTENTEDKEY, (UIntPtr)0);
     keybd_event(0x14, 0x45, KEYEVENTF_EXTENTEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
     //Application.DoEvents(); <-Testing.
}

And then immediately use SendKeys to send some text:

SendKeys.SendWait("This Is An Over Capitalized Test String");

Which STILL comes out as: "tHIS iS aN oVER cAPITALIZED tEST sTRING".

Is there any way to get around this problem?

Answered! Just to clarify for anyone else, the problem was resolved by using

SendKeys.SendWait("{CAPSLOCK}" + text);

I first attempted to use:

SendKeys.SendWait("{CAPSLOCK}");
SendKeys.SendWait("This Is An Over Capitalized Test String");

Which did not work at all.

like image 891
HeWhoWas Avatar asked Nov 01 '11 03:11

HeWhoWas


1 Answers

does this work for you?

    if(Control.IsKeyLocked(Keys.CapsLock))
        SendKeys.SendWait("{CAPSLOCK}This Is An Over Capitalized Test String");
    else
        SendKeys.SendWait("This Is An Over Capitalized Test String");
like image 168
ojlovecd Avatar answered Sep 20 '22 04:09

ojlovecd