Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Kiểm tra Caps Lock và Num Lock bật/tắt qua Console trong C#

Mục đích

Thuộc tính Console.CapsLock và Console.NumberLock (static, read-only) trả về trạng thái phím **Caps Lock** và **Num Lock** trên bàn phím tại thời điểm gọi.

Ví dụ 1: Kiểm tra Caps Lock

using System;

public class Demo
{
    public static void Main(string[] args)
    {
        Console.WriteLine($"Caps Lock is ON? {Console.CapsLock}");
    }
}

Kết quả (ví dụ)

Caps Lock is ON? False

Ví dụ 2: Kiểm tra Num Lock

using System;

public class Demo
{
    public static void Main(string[] args)
    {
        Console.WriteLine($"Num Lock is ON? {Console.NumberLock}");
    }
}

Kết quả (ví dụ)

Num Lock is ON? True

Ví dụ 3: Theo dõi thay đổi trạng thái (Polling)

using System;
using System.Threading;

public class Demo
{
    public static void Main()
    {
        bool lastCaps = Console.CapsLock;
        bool lastNum = Console.NumberLock;

        Console.WriteLine("Nhấn Caps Lock hoặc Num Lock để thấy thay đổi (Ctrl+C để thoát)...");

        while (true)
        {
            bool curCaps = Console.CapsLock;
            bool curNum = Console.NumberLock;

            if (curCaps != lastCaps)
            {
                Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] Caps Lock: {(curCaps ? "ON" : "OFF")}");
                lastCaps = curCaps;
            }
            if (curNum != lastNum)
            {
                Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] Num Lock: {(curNum ? "ON" : "OFF")}");
                lastNum = curNum;
            }

            Thread.Sleep(200); // Poll 5 lần/giây
        }
    }
}

Lưu ý quan trọng

  • Chỉ hoạt động trên **Windows** (console host). Trên Linux/macOS terminal thường trả về false hoặc ném PlatformNotSupportedException.
  • Trạng thái được đọc từ **OS/hardware**, không phải từ buffer input của console.
  • Không có event notification -> phải polling nếu muốn theo dõi real-time.
  • Không thể **set** trạng thái (chỉ đọc). Để bật/tắt lập trình, cần P/Invoke keybd_event hoặc SendInput (user32.dll).
  • Không hoạt động qua SSH/RDP nếu không forward keyboard state.

Ứng dụng

  • CLI tool: cảnh báo user "Caps Lock đang bật" khi nhập mật khẩu.
  • Game/Console app: dùng Num Lock làm toggle chế độ.
  • Accessibility: đọc trạng thái cho screen reader.