如何检测CAPS-Lock并确保它始终被禁用

时间:2014-08-18 19:43:54

标签: c#

好吧,你可能想知道为什么无论如何总是启用大写锁定的使用。好吧,对于初学者,我有一个条形码扫描系统,扫描字母数字条形码,包括小写字母和大写字母等。当条形码扫描时,输入捕获字符并验证条形码和其他东西。这引起了我很多问题,因为有些用户因为x,y原因而大写锁定,当然,当他们扫描项目时,所有角色都变得大写,并且没有任何作用。

我的问题是,有没有办法能够“禁用”(可能是错误的选择)大写锁定或者如果它打开则可能将其关闭。基本上,如果一旦发生TextChanged事件就检测到它,那将是理想的,以确保它始终关闭。

    private void barcodeVal_TextChanged(object sender, EventArgs e)
    {
         //check if caps lock is on. if it is, turn off and evaluate barcode
    }

它是否需要发生。

2 个答案:

答案 0 :(得分:5)

您可以使用Control.IsKeyLocked方法进行检查。

它最终看起来像这样:

if (Control.IsKeyLocked(Keys.CapsLock)) {
    // Caps lock key is on
}
else {
    // The Caps Lock key is OFF
}

我不赞成我会推荐它,但here's an article描述了如何关闭Caps Lock键。好像你可能也在寻找它。

答案 1 :(得分:1)

在搜索时,从this page页面获取的代码似乎有效:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

public class CapsLockControl
{
    [DllImport("user32.dll")]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,UIntPtr dwExtraInfo);
    const int KEYEVENTF_EXTENDEDKEY = 0x1;
    const int KEYEVENTF_KEYUP = 0x2;

public static void Main()
{
    if (Control.IsKeyLocked(Keys.CapsLock))
        {
            Console.WriteLine("Caps Lock key is ON.  We'll turn it off");
            keybd_event(0x14, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr) 0);
            keybd_event(0x14, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
            (UIntPtr) 0);
        }
    else
        {
            Console.WriteLine("Caps Lock key is OFF");
        }
    }
}

您是否可以简单地将条形码字符串强制设置为上部或下部,并将它们与数据库中类似的上部或下部字符串进行比较?