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/p/2251797.html