2022最新C#禁用ctrl+alt+del等键盘热键方法,禁用USB,win7、win10有效

   

     此方法是通过修改注册表键盘扫描码方式实现的,主要针对的是win7、win10系统,实测效果很好,可以禁用ctrl+alt+del键,Windows键、Esc键等任意键。而不是通过全局钩子的方式实现的(这种方式只在xp下有效,而在win10下无效)。

      通过checklist方式自行选择要禁用的按键,可实现一键禁用多个按键,以及禁用系统USB。主要实现源码如下,软件下载地址键盘按键禁用(ctrl+alt+del等)及USB禁用工具(2022.05||支持win10)-C#文档类资源-CSDN文库

 private void button1_Click(object sender, EventArgs e)
        {
            const string keyName = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout";
            try
            {
               
                keyReg = GetRegistry();//根据选择禁用的按键,动态获取需要写入注册表的值
                if (checkBox1.Checked)//键盘禁用,可禁用任意需要禁用的按键
                {
                    Registry.SetValue(keyName, "Scancode Map", keyReg, RegistryValueKind.Binary);
                }
                if (checkBox2.Checked)//usb禁用
                {
                    RegistryKey key = Registry.LocalMachine;
                    RegistryKey software = key.OpenSubKey(@"SYSTEM\\CurrentControlSet\\services\\USBSTOR", true);
                    string GetValue = software.GetValue("Start").ToString();
                    software.SetValue("Start", 4);
                }

            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
                return;
            }
            MessageBox.Show("禁用已设置,重启电脑后生效!");
        }

根据选择禁用的按键,动态获取需要写入注册表的值,函数GetRegistry如下:

 private byte[] GetRegistry()
        {
            byte[] keyReg1 = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0};
            int groupCnt = checkedListBox1.CheckedItems.Count;
            byte[] keyReg2 = new byte[] {Convert.ToByte("0x" + (groupCnt + 1).ToString(),16), 0, 0, 0 };
            byte[] keyReg3 = new byte[] { 0, 0, 0, 0 };
            byte[] keyReg = new byte[keyReg1.Length+ keyReg2.Length+ groupCnt*4+ keyReg3.Length];
            keyReg1.CopyTo(keyReg, 0);
            keyReg2.CopyTo(keyReg, keyReg1.Length);
            for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
            {
                string[] sArray = checkedListBox1.CheckedItems[i].ToString().Split(' ');
                Int32 key1 = Convert.ToInt32("0x"+sArray[1],16);
                Int32 key2 = Convert.ToInt32("0x"+sArray[2],16);
                byte[] tempReg = new byte[] { 0, 0, Convert.ToByte("0x" + sArray[1], 16), Convert.ToByte("0x" + sArray[2], 16) };
                tempReg.CopyTo(keyReg, keyReg1.Length+ keyReg2.Length+ tempReg.Length*i);
            }
            keyReg3.CopyTo(keyReg, keyReg1.Length+ keyReg2.Length+ groupCnt * 4);
          

            return keyReg;

        }

 取消键盘和USB禁用,代码如下:

   private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                RegistryKey rkLm = Registry.LocalMachine;
                RegistryKey rkLmSys = rkLm.OpenSubKey("SYSTEM");
                RegistryKey rkLmSysCcs = rkLmSys.OpenSubKey("CurrentControlSet");
                RegistryKey rkLmSysCcsCtrl = rkLmSysCcs.OpenSubKey("Control");
                RegistryKey rkLmSysCCsCtrlKl = rkLmSysCcsCtrl.OpenSubKey("Keyboard Layout", true);
                RegistryKey key = Registry.LocalMachine;
                RegistryKey software = key.OpenSubKey(@"SYSTEM\\CurrentControlSet\\services\\USBSTOR", true);
                string GetValue = software.GetValue("Start").ToString();
                if (checkBox1.Checked)
                {
                    rkLmSysCCsCtrlKl.DeleteValue("Scancode Map", true);
                }
                if (checkBox2.Checked)
                {
                    software.SetValue("Start", 3);
                }
                rkLmSysCCsCtrlKl.Close();
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message + "\n" + "无须再次开启!");
                return;
            }
            MessageBox.Show("禁用已取消,重启电脑后生效!!");
            
        }

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

victory_250

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值