NEWS

[C#] Hướng dẫn bắt trạng thái các phím Numlock, Capslock, Insert để hiển thị trên thanh Status bar Winform

[C#] Hướng dẫn bắt trạng thái các phím Numlock, Capslock, Insert để hiển thị trên thanh Status bar Winform
Đăng bởi: Thảo Meo - Lượt xem: 4444 11:26:46, 14/02/2020C#   In bài viết

Xin chào các bạn, hôm nay mình tiếp tục hướng dẫn các bạn các bắt sự kiện các phím chức năng: Numlock, Capslock, Insert để hiển thị trên thanh trạng thái Status bar Winform C#.

Khi các bạn lập trình ứng dụng các bạn thường thấy một số ứng dụng hiển thị các phím như: Numlocks, Capslock, Scroll Lock để cho người dùng nhìn vào là biết bàn phím đang ở trạng thái nào.

Như giao diện phần mềm kế toán MISA 2019 dưới đây:

caplocks_demo_misa (1)

Thì trong bài viết này, mình sẽ hướng dẫn các bạn viết một ứng dụng đơn giản với chức năng như hình trên:

Và khi chúng ta, double click vào các ô này thì ứng dụng sẽ gọi phím luôn (nghĩa là khi click vào nó sẽ tự động tắt/bật phím chức năng này luôn).

Giao diện demo của ứng dụng Caplocks, Numlocks C#:

DEMO caplocks_numlocks_csharp

Source code ứng dụng Numlock, Capslock C#:

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

namespace ToggleKeys_OldMethod
{
    public partial class Form1 : Form
    {

        [DllImport("user32.dll")]
        internal static extern short GetKeyState(int keyCode);

        [DllImport("user32.dll")]        
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);        


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {          
            labelDayDate.Text = System.DateTime.Today.DayOfWeek + ", " + System.DateTime.Today.Day + "-" + System.DateTime.Today.Month + "-" + System.DateTime.Today.Year;    
            UpdateKeys();
        }

        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
         
            if (e.KeyData == Keys.Insert)
            {
                UpdateInsert();
            }
            else if (e.KeyData == Keys.NumLock)
            {
                UpdateNUMLock();
            }
            else if (e.KeyData == Keys.CapsLock)
            {
                UpdateCAPSLock();
            }            
        }

        private void lblINS_DoubleClick(object sender, EventArgs e)
        {
            PressKeyboardButton(Keys.Insert);
            UpdateInsert();
        }

        private void lblNUM_DoubleClick(object sender, EventArgs e)
        {
            PressKeyboardButton(Keys.NumLock);
            UpdateNUMLock();
        }

        private void lblCAPS_DoubleClick(object sender, EventArgs e)
        {
            PressKeyboardButton(Keys.CapsLock);
            UpdateCAPSLock();
        }

        private void Form1_Activated(object sender, EventArgs e)
        {
            UpdateKeys();
        }
        
       
        private void UpdateKeys()
        {
            UpdateInsert();
            UpdateNUMLock();
            UpdateCAPSLock();
        }

        
        private void UpdateInsert()
        {
            bool NumLock = (GetKeyState((int)Keys.Insert)) != 0;

            if (NumLock)
            {
                lblINS.Text = "INS";
            }
            else
            {
                lblINS.Text = "OVR";
            }

            this.Refresh();
        }

    
        private void UpdateNUMLock()
        {
            bool NumLock = (GetKeyState((int)Keys.NumLock)) != 0;

            if (NumLock)
            {
                lblNUM.Text = "NUM";
            }
            else
            {
                lblNUM.Text = String.Empty;
            }

            this.Refresh();
        }

        private void UpdateCAPSLock()
        {
            bool CapsLock = (GetKeyState((int)Keys.CapsLock)) != 0;

            if (CapsLock)
            {
                lblCAPS.Text = "CAPS";
            }
            else
            {
                lblCAPS.Text = String.Empty;
            }

            this.Refresh();
        }

        
        private void PressKeyboardButton(Keys keyCode)
        {
            const int KEYEVENTF_EXTENDEDKEY = 0x1;
            const int KEYEVENTF_KEYUP = 0x2;
            keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, 0);
            keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }

  

    }
}

Thanks for watching!

 

DOWNLOAD SOURCE

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[C#] Hướng dẫn bắt trạng thái các phím Numlock, Capslock, Insert để hiển thị trên thanh Status bar Winform
Đăng bởi: Thảo Meo - Lượt xem: 4444 11:26:46, 14/02/2020C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.