DELPHI实现键盘勾子

 

 1 //调用键盘钩子,屏蔽功能键
 2  function keyHookProc(nCode: Integer; LWParam: WPARAM; LLParam: LPARAM): LRESULT;  stdcall
 3   
 4  var
 5   hHk :HHOOK;
 6   
 7 //创建勾子
 8 hHk:= SetWindowsHookEx( 13, @keyHookProc, HInstance,  0);
 9 
10  function keyHookProc(nCode: Integer; LWParam: WPARAM; LLParam: LPARAM): LRESULT;//调用键盘钩子,屏蔽功能键
11  var
12   p: PKBDLLHOOKSTRUCT;
13   y: integer;
14  begin
15     if nCode <  0  then
16    begin
17     Result:= CallNextHookEx(hHk, nCode, LWParam, LLParam);
18     Exit;
19    end
20    else
21    begin
22     y :=  0;
23      case LWParam  of
24       WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP,WM_SYSKEYUP:
25        begin
26         p:= PKBDLLHOOKSTRUCT(LLParam);
27          if p^.vkCode = VK_LWIN  then y:=  1
28          else  if p^.vkCode = VK_RWIN  then y:=  1
29          else  if (p.vkCode = VK_RETURN)  and ((p.flags  and (KF_ALTDOWN  shr  8)) <>  0)
30            and ((GetKeyState(VK_CONTROL)  and $ 8000) <>  0then y:=  1
31          else  if (p.vkCode = VK_ESCAPE)  and ((GetKeyState(VK_CONTROL)  and $ 8000) <>  0then y:=  1
32          else  if (p.vkCode = VK_ESCAPE)  and ((GetKeyState(VK_MENU)  and $ 8000) <>  0then y:=  1
33          else  if (p.vkCode =  192and ((GetKeyState(VK_CONTROL)  and $ 8000) <>  0then y:=  1
34          else  if (p.vkCode = VK_TAB)  and ((GetKeyState(VK_MENU)  and $ 8000) <>  0then y:=  1;
35        end;
36      end;
37      if y= 1  then
38     Result:= 1 //如果为WIN功能键则屏蔽
39      else
40     Result:= CallNextHookEx(hHk, nCode, LWParam, LLParam); //其他键放下一个钩子
41    end
42  end;
43 
44 
45 //卸载勾子
46 UnHookWindowsHookEx(hHk);



 

转载于:https://www.cnblogs.com/whisht/archive/2011/11/16/2251797.html

又一个delphi键盘钩子用法及代码,可以截获几乎所有键值,例如:shift ?,ctrl ?,alt ?,F1~F12,shift或者ctrl或者alt F1~F12,单独的 shift、ctrl、alt 键值,特殊键ins、del、caps lock、num lock、小键盘数字 等等,你只要稍作修改,也可以截获 ctrl alt ?等键值,没有截获不到的键值,本程序不使用dll方式,使用常规方式,方便你编译调试修改,支持xp、vista、win7,是最强悍的键盘钩子控件, 在delphi7下通过。   myshiftchar:string;//返回shift状态 例如 ctrl   mypresschar:string;//返回整个键值 例如 ctrl g   dulictrl:string;//返回 ctrl 和 alt 单独状态, =ctrl or =alt   安装方法:   本控件的核心源代码在 unit2   首先 创建调用主窗体,假定是form1,在form1上放一个 memo控件(必须),然后创建一个新单元 如unit2,把我的unit2 单元的源代码全部复制过去,以下修改,首先确保form1使用 新单元 如unit2,并且unit2也使用form1。   在新单元unit2 ,找到 函数 function KeyBHkHandle 过程,在其找到以下两条语句:    // 在这里根据自己的情况修改    form1.Memo1.Lines.Add(mypresschar);   // 在这里根据自己的情况修改    if mypresschar'' then form1.Memo1.Lines.Add(mypresschar);   如果你的调用主窗体就叫form1,则不用修改,否则把这两条语句的form1修改为你的调用主窗体的名字。   在 memo编辑框的onChange事件编写自己的 键盘消息接受主控制过程,其 字符串mypresschar 返回总键值,它跟memo编辑框显示值是一样的 ,例如 g、shift g、ctrl 2、F9、alt F9、 等等,其 字符串shiftstr 返回 控制键 shift ctrl alt 的状态,例如按下ctrl,则 shiftstr=‘ctrl’ ,否则=''。   最后不要忘记在程序退出时卸载键盘钩子!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值