关于这方面的文章挺多,对任务栏、win键、Ctrl+Esc、Alt+Tab的屏蔽,一般方法较为简单,最多用底层键盘钩子+DLL就能完美解决。但是针对Ctrl+Alt+Del的屏蔽,方法基本有两种,一种是采用Gina Dll技术,替换Window自带的MSGINA.DLL,这个技术不仅不易调试(很容易系统就无法进入了),并且效果很不好,按Ctrl+Alt+Del三键虽然不会出现任务管理器,但屏幕闪烁;另一种是采用DLL注入技术,在消息循环中真正屏蔽Ctrl+Alt+Del键,效果很好,不会出现第一种方法中的闪屏现象。
本程序就是采用了第二种方法有效的屏蔽了Ctrl+Alt+Del。除此之外,在屏蔽任务栏时还有一个技术难点,就是当用户设置任务栏为自动隐藏时,不能很好的屏蔽任务栏(在Win2000鼠标滑到底部,任务栏还会出现),在XP下通过API函数SHAppBarMessage很有效的解决了该问题,不过同样的代码在Win2000中不起作用,MSDN有一段话说,在Win2000下无法用程序设定该设置,只能手动设置(天知道微软为何屏蔽该功能?),所以我也没有办法,用API函数keybd_event勉强解决了该问题(如果解决不好,它会提示你关闭任务栏自动隐藏功能)。
此外,最大的一个改变是,我把所有的功能集成到一个只有29K的控件里,只需两个方法就可以完美搞定。
下面是示例源码:
'************************************************************
'**模 块 名:frmDemo
'**说 明:YFsoft 版权所有2004 - 2005(C)
'**创 建 人:叶帆
'**日 期:2004-10-21 15:47:15
'**修 改 人:
'**日 期:
'**描 述:屏蔽系统键 Win98/Win2000/WinXP
'**版 本:V1.0.0
'************************************************************
Option Explicit
'************************************************************
'**函 数 名:Command1_Click
'**输 入:Index(Integer) - 0,1
'**输 出:无
'**功能描述:屏蔽系统键
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2004-10-21 15:47:12
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'************************************************************
Private Sub Command1_Click(Index As Integer)
If Index = 0 Then
YFSysKey1.HideSysKey '屏蔽
Else
YFSysKey1.ShowSysKey '显示
End If
End Sub
-------------------------------