- [DEVEXPRESS] Hỗ trợ tìm kiếm highlight không dấu và không khoảng cách trên Gridview Filter
 - [C#] Chia sẻ source code phần mềm Image Downloader tải hàng loạt hình ảnh từ danh sách link url
 - [C#] Chụp hình và quay video từ camera trên winform
 - [C#] Chia sẽ full source code tách file Pdf thành nhiều file với các tùy chọn
 - Giới thiệu về Stock Tracker Widget - Công cụ theo dõi cổ phiếu và cảnh báo giá tăng giảm bằng C# và WPF
 - [VB.NET] Chia sẻ công cụ nhập số tiền tự động định dạng tiền tệ Việt Nam
 - [VB.NET] Hướng dẫn fill dữ liệu từ winform vào Microsoft word
 - [VB.NET] Hướng dẫn chọn nhiều dòng trên Datagridview
 - Hướng Dẫn Đăng Nhập Nhiều Tài Khoản Zalo Trên Máy Tính Cực Kỳ Đơn Giản
 - [C#] Chia sẻ source code phần mềm đếm số trang tập tin file PDF
 - [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
 - [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
 - [C#] Hướng dẫn tạo mã QRcode Style trên winform
 - [C#] Hướng dẫn sử dụng temp mail service api trên winform
 - [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
 - [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
 - [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
 - [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
 - [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
 - [C#] Hướng dẫn download file từ Minio Server Winform
 
[C#] Khóa shortcut key trên bàn phím winform
Xin chào các bạn, bài viết hôm nay mình sẻ hướng dẫn các bạn cách khóa shortcut key trên lập trình C# winform.
[C#] Disabled Shortcut key Winform
Dưới đây là giao diện demo ứng dụng:

Khi các bạn check vào ô Lock shortcut key:
Một số phím sẽ bị khóa các bạn sẽ không thao tác được:
- Window + R
 - Window + E
 - Alt + Tab
 - Window + Tab
 - Ctrl + ESC
 - Alt + ESC
 
Tuy nhiên tổ hợp phím Window + L (Lock computer) không khóa được
Full source code lock shortcut key C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DisabledHotKey
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        { 
        }
        private delegate int LowLevelKeyboardProcDelegate(int nCode, int
           wParam, ref KBDLLHOOKSTRUCT lParam);
        [DllImport("user32.dll", EntryPoint = "SetWindowsHookExA", CharSet = CharSet.Ansi)]
        private static extern int SetWindowsHookEx(
           int idHook,
           LowLevelKeyboardProcDelegate lpfn,
           int hMod,
           int dwThreadId);
        [DllImport("user32.dll")]
        private static extern int UnhookWindowsHookEx(int hHook);
        [DllImport("user32.dll", EntryPoint = "CallNextHookEx", CharSet = CharSet.Ansi)]
        private static extern int CallNextHookEx(
            int hHook, int nCode,
            int wParam, ref KBDLLHOOKSTRUCT lParam);
        const int WH_KEYBOARD_LL = 13;
        private int intLLKey;
        private KBDLLHOOKSTRUCT lParam;
        private struct KBDLLHOOKSTRUCT
        {
            public int vkCode;
            int scanCode;
            public int flags;
            int time;
            int dwExtraInfo;
        }
        private int LowLevelKeyboardProc(
            int nCode, int wParam,
            ref KBDLLHOOKSTRUCT lParam)
        {
            bool blnEat = false;
            switch (wParam)
            {
                case 256:
                case 257:
                case 260:
                case 261:
                    //Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key
                    if (((lParam.vkCode == 9) && (lParam.flags == 32)) ||
                    ((lParam.vkCode == 27) && (lParam.flags == 32)) || ((lParam.vkCode ==
                    27) && (lParam.flags == 0)) || ((lParam.vkCode == 91) && (lParam.flags
                    == 1)) || ((lParam.vkCode == 92) && (lParam.flags == 1)) || ((true) &&
                    (lParam.flags == 32)))
                    {
                        blnEat = true;
                    }
                    break;
            }
            if (blnEat)
                return 1;
            else return CallNextHookEx(0, nCode, wParam, ref lParam);
        }
        private void KeyboardHook(object sender, EventArgs e)
        {
            intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, new LowLevelKeyboardProcDelegate(LowLevelKeyboardProc),
                       System.Runtime.InteropServices.Marshal.GetHINSTANCE(
                       System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0]).ToInt32(), 0);
        }
        private void ReleaseKeyboardHook()
        {
            intLLKey = UnhookWindowsHookEx(intLLKey);
        }
        private void chkLock_CheckedChanged(object sender, EventArgs e)
        {
            if (chkLock.Checked)
                KeyboardHook(this, e);
            else
                ReleaseKeyboardHook();
        }
    }
}
Thanks for watching!


