在VC与VB中怎样利用系统的钩子函数控制Ctrl+Alt+Shift三键功能?

解决方案 »

  1.   

    好像不好控制,不过如果你想屏蔽的话可以
    SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,1,NULL,0);
    如果想锁定计算机的话,可以
    typedef BOOL (*MYPROC)(); 
    HINSTANCE hinstLib; 
    MYPROC ProcAdd;  
    hinstLib = LoadLibrary("user32.dll"); 
    if (hinstLib != NULL) 

      ProcAdd = (MYPROC) GetProcAddress(hinstLib, "LockWorkStation"); 
     // If the function address is valid, call the function.
            if (NULL != ProcAdd) 
            {
                ProcAdd (); 
            }
      

  2.   

    如何: 在Windows2000中动态禁用/启用Ctrl-Alt-http://blog.csdn.net/jiangsheng/archive/2003/11/09/3789.aspx
      

  3.   

    此文章的信息来自CSDN论坛VC/MFC版的讨论 在NT/2000中怎么禁用Ctrl+Alt+Delete?(不能用gina,键盘驱动) 
    在Windows2000中Ctrl-Alt-Delete组合键的处理如下:Winlogon初始化的时候,在系统中注册了CTRL+ALT+DEL Secure Attention Sequence(SAS)热键,并且在WinSta0 Windows 系统中创建三个桌面。 
    SAS热键的注册使得Winlogon成为第一个处理CTRL+ALT+DEL的进程,所以保证了没有其他应用程序能够处理这个热键。在 Windows NT/Windows 2000/Windows XP中, WinSta0 是表示物理屏幕、鼠标和键盘的Windows系统对象的名字。Winlogon在WinSta0 Windows系统中创建了SAS窗口(窗口标题是"SAS Window")和如下三个桌面。 Winlogon 桌面 
    应用程序 桌面 
    屏幕保护 桌面
    当用户按下Ctrl-Alt-Delete组合键时,Winlogon桌面上的SAS窗口收到它注册的系统热键消息(WM_HOTKEY) 
    SAS Window窗口处理这个消息调用Graphical Identification and Authentication(GINA)动态连接库中的相关函数
    要中断Ctrl-Alt-Delete组合键的处理,可以有以下方式从键盘驱动层捕获Ctrl-Alt-Delete 
    替换Winlogon 
    替换GINA 
    Hook Winlogon 上SAS窗口的窗口过程(需要当前登录用户有调试权限) 
    Hook  GINA里边的函数WlxLoggedOnSAS,然后返回WLX_SAS_ACTION_NONE(未研究)
    更多信息
    鉴于系统的更新可能造成我们替换的系统文件和其他系统文件不兼容(著名的DLL地狱),所以不推荐替换Winlogon.exe和GINA的方法。这里我们讨论Hook Winlogon 上的SAS窗口的窗口过程的方法。 因为SAS窗口和我们的程序内存地址空间不同,所以要写一个动态连接库,加载到SAS窗口的内存空间中。下面是动态连接库的源代码。 //---------------------------------------------------------------------------
    //作者 :韦覃武
    //网上呢称:BCB_FANS(四大名捕之追杀令)(此为CSDN和www.driverdevelop.com之帐号)
    //E-Mail :[email protected]
    //日期 :2002-10-20
    //
    //功能 :在2000下屏蔽Ctrl + Alt + Del组合键。(在Windows 2000 Professional SP3
    // 中文版平台下面测试通过)
    //原理 :采用远程线程注入技术,装载一个DLL到Winlogon进程,然后截获SAS窗口的窗
    // 口过程,接管WM_HOTKEY消息,以达到屏蔽Ctrl + Alt + Del之目的。
    //开发语言:Borland C++Builder 5.0 Patch2
    //技术比较:关于在2000下面如何屏蔽Ctrl + Alt + Del组合键,一种常被提到的解决方法就
    // 是使用自己写的GINA去替换MSGINA.DLL,然后在WlxLoggedOnSAS里边直接返回
    // WLX_SAS_ACTION_NONE。嘿嘿,说到底这并不是真正地屏蔽了这个组合键,只是
    // 直接返回WLX_SAS_ACTION_NONE时,Winlogon进程又自动从"Winlogon"桌面切换
    // 回原来的"Default"桌面了,而不是显示安全对话框,所以看起来被屏蔽了:),
    // 使用那种方法明显地看到桌面在闪烁!但是使用本文的方法时,你不会看到任
    // 何闪烁!
    //鸣谢 :www.driverdevelop.com上的icube和lu0。
    //版权 :转载请注明原作者:)
      

  4.   

    呵呵,刚刚看jiangsheng的Blog,发现的最新更新
    http://blog.csdn.net/jiangsheng/archive/2004/07/05/34814.aspx
      

  5.   

    你是要截获这三个键还是屏蔽Ctrl+Alt+Shift这三个键,如果是捕获,用键盘钩子就可以判断了