admin管理员组

文章数量:1535329

   

     此方法是通过修改注册表键盘扫描码方式实现的,主要针对的是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("禁用已取消,重启电脑后生效!!");
            
        }

本文标签: 热键键盘方法最新alt