在XP/2K 下实现 Win+Ctrl+Del 等键的屏蔽的方法

来源:互联网 发布:出国留学用哪种gpa算法 编辑:程序博客网 时间:2024/04/30 14:07
 在 Windows 98 下我们知道用 SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @temp, 0);  来实现 Win+Ctrl+Del屏蔽,但这种方法在NT的操作系统下如 Windows XP / Windows 2000等就不行了,这里我给大家提供一个新的方法,采用钩子拦截的方式,来实现屏蔽系统按键。本示例附详细的源码与演示程序。

  源码与演示程序。 

实现方法的代码如下:

{*******************************************************************************

   XOtecExpress Visual Component Library [陆岛工作室]
   Copyright (c) 2008 XOtec Studio.  [PengJunli]

   By: PengJunLi Build: 2008-06
   E-mail: iinsnian@126.com  XOtec@vip.QQ.com  QQ:442801172

*******************************************************************************
}

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes;

type
  tagKBDLLHOOKSTRUCT 
= packed record
   vkCode: DWORD;
   ScanCode: DWORD;
   Flags:  DWORD;
   Time:  DWORD;
   dwExtraInfo: DWORD;
  
end;

  KBDLLHOOKSTRUCT    
=   tagKBDLLHOOKSTRUCT;
  PKBDLLHOOKSTRUCT   
=   ^KBDLLHOOKSTRUCT;   
    
const
  WH_KEYBOARD_LL    
=   13;
  LLKHF_ALTDOWN    
=   $20;

//采用钩子的方法屏蔽系统按键
function DisableTaskKeys(Disable: Boolean): Boolean;

implementation

var
  hhkLowLevelKybd:   HHOOK;

{ LowLevelKeyboardProc }

function LowLevelKeyboardProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
var
  fEatKeystroke: BOOL;
  p: PKBDLLHOOKSTRUCT;
begin
  Result :
= 0;
  fEatKeystroke   :
=   FALSE;   
  p :
= PKBDLLHOOKSTRUCT   (lParam);

  
if (nCode = HC_ACTION)   then //nCode值为HC_ACTION时表示WParam和LParam参数包涵了按键消息
  
begin   
  
//拦截按键消息并测试是否是Ctrl+Esc、Alt+Tab、和Alt+Esc功能键。   
    
case   wParam   of
      WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP:
       fEatKeystroke   :
=
        ((p.vkCode 
= VK_TAB) and ((p.flags and LLKHF_ALTDOWN) <> 0))   or   //   Alt+Tab
        ((p.vkCode 
= VK_ESCAPE) and ((p.flags and LLKHF_ALTDOWN) <> 0))or   //
        (p.vkCode 
= VK_Lwin) or (p.vkCode = VK_Rwin) or (p.vkCode = VK_apps) or //屏蔽WIN按键
        ((p.vkCode 
= VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000<> 0))  or
        ((p.vkCode 
= VK_F4) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or
        ((p.vkCode 
= VK_SPACE) and ((p.flags and LLKHF_ALTDOWN) <> 0)) OR
        (((p.vkCode 
= VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN and p.flags) and (P.vkCode = VK_Delete)));
    
end;
  
end;
    
  
if fEatKeystroke = True then
    Result :
= 1;

  
if nCode <> 0 then
    Result :
= CallNextHookEx(0, nCode, wParam, lParam);
end;

{ DisableTaskKeys }

function DisableTaskKeys(Disable: Boolean): Boolean;
begin
  Result :
= False;
  
  
if (hhkLowLevelKybd = 0and Disable then
  
begin
    hhkLowLevelKybd :
=SetWindowsHookExW(WH_KEYBOARD_LL, LowLevelKeyboardProc, Hinstance, 0); //设置钩子
    Result :
= hhkLowLevelKybd<>0// 返回设置成功
  
end else if not Disable and (hhkLowLevelKybd<>0then
  
begin
    
if UnhookWindowsHookEx(hhkLowLevelKybd) then  //卸载键盘钩子
    
begin
      Result :
= True;
      hhkLowLevelKybd :
= 0;
    
end;
  
end;
end;

end.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 育碧换电脑了无法同步云存档怎么办 刺客信条起源育碧需要激活码怎么办 电脑连不上网怎么办wifi可以用 电脑登录账号密码错误锁定了怎么办 白色T恤衫上沾上黑色的黄油怎么办 家教遇到成绩好的学生该怎么办 跟越南人离婚孩子中国户口9怎么办 老婆是个越南人至今没户口怎么办 等离子屏z板链接处排线打火怎么办 等离子自动调焊的成形不好怎么办 村里内村道路中间被抢占了怎么办 华为换电池之后卡没反应怎么办 汽车钥匙换电池后没反应怎么办 汽车解锁换电池后没反应怎么办 包裹显示待收件人向海关申报怎么办 在越南签证被公安扣了怎么办 酷派手机收不到验证码怎么办 苹果想把图片上的字盖上怎么办 婴儿自己把眼珠子抠红了怎么办 如果美陆战队员进入台湾那怎么办? 顺产生完小孩吸不通奶怎么办 耐克空军一号白色底发黄怎么办 中行网银u盾丢了怎么办 有人用你的手机号码不停注册怎么办 获得公开你微信头像的权限是怎么办 手机能进的网站电脑进不去怎么办 苹果8p下不了微信怎么办 苹果手机版本过底不能下微信怎么办 手机打开视频跳转到qq是怎么办 淘宝店铺显示服务竟然出错了怎么办 母羊下完羊羔把羊衣吃了怎么办? 移植后56天有黑色东西怎么办 我家的金丝熊浑身都是尿怎么办 一键启动车钥匙丢了怎么办 把爷爷的遗物弄丢了怎么办 如果你娶了一个傻子你怎么办 在国外订机票手机收不到信息怎么办 网上买机票名字写错了怎么办 买机票名字错了一个字怎么办 微店没收到货却显示已收货怎么办? 手机存的照片误删了怎么办