写了一款触摸屏软件,通过HOOK屏蔽了大多数键盘,但是总有一些系统热键屏蔽不掉,如ctr+alt+del \ win+l \ctr+shift+esc 等,关于屏蔽ctr+alt+esc,网上有人用流的方法来屏蔽,有些人用注册表的方法来屏蔽,反正都可以实现,但是WIN+L键不能用流的方式来屏蔽,流方式屏蔽的原理是用数据流去访问任务管理器文件tasklist.exe,一直占用着不放,这样系统就无法正常调用,达到了屏蔽的作用,其缺点是程序运行时会报文件无法访问的错误,不过捕获一下这个异常,try catch一下,可以很完美的解决。好像扯的有点远了,下面切入主题,讲下如何屏蔽WIN+L键。
我在网上搜索了一下相关的方法,发现有大牛为了屏蔽这个热键,都挖到系统的里三层,外三层了,汇编DEBUG的全上了,而小菜我功力有限,没有时间和水平去感觉那么深,所以自己研究了一下通过组策略来屏蔽,当然这个就比较简单了。开始,运行, gpedit.msc,回车,打开组策略,找到相关的路径(太长,没记住,不描述了),但是你总不能让客户去按这个方法去屏蔽的,所以跟踪了一注册表操作,发现修改组策略其实是对注册表有些键值进行了更改,并且是当即生效的,于是写两个方法加入程序中,完美屏蔽WIN+L键。代码如下:
//code by 老鬼 QQ:147399120
//启用win+l键。
private void EnableWinLock()
{
RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
key.DeleteValue("DisableLockWorkstation");
key.Close();
}
//屏蔽WIN+L键
private void DisableWinLock()
key.SetValue("DisableLockWorkstation",1);
在程序运行的时候调用DisableWinLock(),写入注册表进行屏蔽,程序退出时运行EnableWinLock()进行解锁还原。以上代码在WIN 7下面测试通过,其它系统没有进行严格测试,大家如有用,请直接拿去用,如无用,请身行修改。