• 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);



     

  • 相关阅读:
    【MFC】对话框自带滚动条的使用
    【MFC】MFC DLEdit 设计属于自己的编辑框_鼠标悬停
    【MFC】MoveWindow();函数使用详解
    【MFC】SetWindowPos函数使用详解
    模板 key+1
    lazyload 分页加载
    缓慢显示隐藏
    js计算日期的前几天的日期
    判断子元素(or属性)是否存在
    动态加载的数据,hover效果
  • 原文地址:https://www.cnblogs.com/whisht/p/2251797.html
Copyright © 2020-2023  润新知