Программно отключить заглавные буквы
Я использую 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