zoukankan      html  css  js  c++  java
  • DELPHI实现键盘勾子

    //调用键盘钩子,屏蔽功能键
    function keyHookProc(nCode: Integer; LWParam: WPARAM; LLParam: LPARAM): LRESULT; stdcall; 
      
    var
      hHk :HHOOK;
      
    //创建勾子
    hHk:= SetWindowsHookEx(13, @keyHookProc, HInstance, 0);
    
    function keyHookProc(nCode: Integer; LWParam: WPARAM; LLParam: LPARAM): LRESULT;//调用键盘钩子,屏蔽功能键
    var
      p: PKBDLLHOOKSTRUCT;
      y: integer;
    begin
       if nCode < 0 then
      begin
        Result:= CallNextHookEx(hHk, nCode, LWParam, LLParam);
        Exit;
      end
      else
      begin
        y := 0;
        case LWParam of
          WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP,WM_SYSKEYUP:
          begin
            p:= PKBDLLHOOKSTRUCT(LLParam);
            if p^.vkCode = VK_LWIN then y:= 1
            else if p^.vkCode = VK_RWIN then y:= 1
            else if (p.vkCode = VK_RETURN) and ((p.flags and (KF_ALTDOWN shr 8)) <> 0)
              and ((GetKeyState(VK_CONTROL) and $8000) <> 0) then y:= 1
            else if (p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0) then y:= 1
            else if (p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_MENU) and $8000) <> 0) then y:= 1
            else if (p.vkCode = 192) and ((GetKeyState(VK_CONTROL) and $8000) <> 0) then y:= 1
            else if (p.vkCode = VK_TAB) and ((GetKeyState(VK_MENU) and $8000) <> 0) then y:= 1;
          end;
        end;
        if y=1 then
        Result:=1 //如果为WIN功能键则屏蔽
        else
        Result:= CallNextHookEx(hHk, nCode, LWParam, LLParam); //其他键放下一个钩子
      end
    end;
    
    
    //卸载勾子
    UnHookWindowsHookEx(hHk);


  • 相关阅读:
    17.allegro导入导出[原创]
    16.allegro元件手动摆放[原创]
    15.导入网表及status介绍[原创]
    14.allegro.PCB设计前工作[原创]
    13.allegro 颜色设置[原创]
    env1
    allegro使用汇总 [转贴]
    allegro下快捷键设置[转贴]
    使用Cygwin在Windows上体验Linux的快感
    你们值得拥有最好的未来——致武汉校区每位学员
  • 原文地址:https://www.cnblogs.com/whisht/p/4098861.html
Copyright © 2011-2022 走看看