想要禁用window热键,
ctrl +alt + delete和ESC+ SHIFT+CTRL等的热键。
不能通过钩子,就想到注册表了。
创建一个.reg文件,将如下写进去,
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,06,00,00,00,00,00,5b,e0,00,00,5c,e0,00,00,38,00,00,00,38,e0,00,00,01,00,00,00,00,00,00,00
00,00,00,00,00,00,00,00:固定的不需要改
06:代表禁用多少个按键+1
5b,e0,00,00:5b,e0代表window ,00,00代表禁用
5c,e0:禁用window
38,00
38,e0
01,00
00,00,00,00:结束的标记
当然这个是在注册表里面写的,但是在C# 代码中就不能这么写了,
RegistryKey mreg = Registry.LocalMachine;
string strValue = @"SYSTEM\CurrentControlSet\Control\Keyboard Layout";
mreg = mreg.OpenSubKey(strValue, true);
string childpath = mreg == null ? mreg.CreateSubKey(strValue).ToString() : "";//路径不存在,创建好预设路径
mreg.SetValue("Scancode Map", new byte[] { 00, 00, 00, 00, 00, 00, 00, 00, 06, 00, 00, 00, 00, 00, 91, 224, 00, 00, 92, 224, 00, 00, 56, 00, 00, 00, 56, 224, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00 }, RegistryValueKind.Binary);
mreg.Flush();
mreg.Close();
就能搞定,把注册表的改成我们需要禁用的按键了,具体的大家在网上都可以搜到。
删除注册表中二进制的值:
RegistryKey R_local = Registry.LocalMachine;
RegistryKey R_run = R_local.CreateSubKey(@"SYSTEM\CurrentControlSet\Control\Keyboard Layout");
R_run.DeleteValue("Scancode Map", false); //adobe是值得名称
outcome = true;
R_run.Close();
R_local.Close();
完美,哈哈哈!全部禁用了以上快捷键,但是必须要重启电脑才会生效,当然了这个禁用了以后就是永远禁用除非恢复注册表,所以explorer.exe和以上快捷键一定要谨慎使用,要不然电脑就要重做系统了!