以编程方式禁用大写锁定

我在自动化程序中使用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"); 

其中仍然出现:“tHIS不适用于经过考验的测试”。

有没有办法解决这个问题?

回答! 只是为了澄清其他人,问题通过使用解决了

 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 
Interesting Posts