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("禁用已取消,重启电脑后生效!!");
}
版权声明:本文标题:2022最新C#禁用ctrl+alt+del等键盘热键方法,禁用USB,win7、win10有效 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1726900718a1089446.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论