Программно отключить заглавные буквы

Я использую SendKeys в программе автоматизации для работы. Я бродил и сейчас пытаюсь сгладить все ошибки, которые я создал:-)

Одним из них является то, что когда я использовал SendKeys.Send("Test"), если CapsLock включен, он будет выдавать "tEST", а не "Test".

Я использовал следующий код, чтобы попытаться определить состояние capsLock и переключить его при необходимости:

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.
}

А затем немедленно используйте SendKeys для отправки текста:

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

Что по-прежнему звучит так: "Это капитализированный тестовый шрифт".

Есть ли способ обойти эту проблему?

Ответил! Просто чтобы прояснить для кого-то еще, проблема была решена с помощью

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

Сначала я попытался использовать:

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

Который не работал вообще.

2 ответа

Решение

Это работает для вас?

    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");

У меня есть приложение, где мне часто нужно переключаться между левым SHIFT и TAB. На моей клавиатуре CAPSLOCK находится между этими двумя клавишами, и я время от времени ошибаюсь, печатая CAPSLOCK вместо TAB. Мое решение состоит в том, чтобы отменить CAPSLOCK и вместо этого отправить вкладку. К моему удивлению, программа зацикливается до переполнения стека. Я узнал, что CAPSLOCK-ключ отправляется дважды. Это мое окончательное решение:

Dim CapsLockProg As Integer = 0 ' after Send Capslock arrives 2 times!!!!!
Private Sub Description_KeyDown(sender As Object, e As KeyEventArgs) Handles Description.KeyDown 
    If e.KeyCode = Keys.Capital Then
        If CapsLockProg < 2 Then
            CapsLockProg += 1
            If CapsLockProg = 1 Then
                Windows.Forms.SendKeys.SendWait("{TAB}{CAPSLOCK}")
            'Else
            '   ignore 2nd Capslock
            End If 
        Else
            CapsLockProg = 0
        End If
    End If
    If e.KeyCode = Keys.Tab Then 
    rest of code
Другие вопросы по тегам