以编程方式禁用大写锁定

本文关键字:写锁 锁定 编程 方式禁 | 更新日期: 2023-09-27 18:13:15

我在工作自动化程序中使用SendKeys。我一直在努力工作,现在正试图解决我所创造的所有错误:-)

其中之一是,当我使用SendKeys.Send("Test")时,如果CapsLock是on,它将产生"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 iS aN overcapitalized tEST 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