關於這方面的文章挺多,對工作列、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
-------------------------------
源碼:http://www.sky-walker.com.cn/yefan/SourceCode/YFSysKey.rar