编程方式禁用大写锁定
问题描述:
我使用的SendKeys在工作的自动化程序。我一直在努力,现在正在努力消除我创建的所有错误:-)编程方式禁用大写锁定
其中之一是,当我使用SendKeys.Send(“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");
哪仍然出现:“这是一个超过预定的测试sTRING”。
有什么办法来解决这个问题呢?
回答!只是为了澄清为别人,这个问题是通过使用
SendKeys.SendWait("{CAPSLOCK}" + text);
解决我第一次尝试使用:
SendKeys.SendWait("{CAPSLOCK}");
SendKeys.SendWait("This Is An Over Capitalized Test String");
哪个没有在所有的工作。
答
这是否对你的工作?
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并提交一个TAB。令我惊讶的是,程序循环直到堆栈溢出。我发现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
如果您执行'SendKeys.Send“{CAPSLOCK}测试”'? – V4Vendetta