zoukankan      html  css  js  c++  java
  • 好用的键盘和鼠标钩子回调函数

    function MouseProc(nCode: integer; wParam: WParam; lParam: LParam): LRESULT; stdcall;
    begin
      Result := 0;
      if nCode < 0 then
        Result := CallNextHookEx(MHookHandle, nCode, wParam, lParam)
      else                                            
      begin
        //Rule of API call, which referred to Win32 Hooks topic in MSDN
        case wParam of    //鼠标左键或右键单击
          WM_LBUTTONUP, WM_NCLBUTTONUP, WM_RBUTTONUP:
            SendMessage(pSharedMem^.InstHandle, pSharedMem^.MessageID, 0, 500);
          WM_MOUSEMOVE:
          begin
            if FIsNew = False then
              SendMessage(pSharedMem^.InstHandle, pSharedMem^.MessageID, 0, 500);
          end;  
        //Sends Message to Instance to which was injected this DLL
        end;    // case
      end;end;
    function KeyboardProc(nCode: Integer; WPARAM: wParam; LPARAM: lParam): LRESULT; stdcall;
    var
      i: Integer;
      nState: SHORT;//得到键盘状态的GetKeyState函数的返回值。这是一个16位的数。
    begin
      Result := 0;
      if nCode < 0 then
        Result := CallNextHookEx(KHookHandle, nCode, wParam, lParam)
      else
      begin
        if (nCode = HC_ACTION) and (((lParam shr 30) and $F) = 0) then
        begin
          for I := 0 to 1 do begin    // Iterate
            nState := GetKeyState(G_KeyValArr.ModKey);//
            if (nState and $80000000) = $80000000 then
            begin
              if (WPARAM = Ord(G_KeyValArr.key)) then
              begin
                if i = 0 then    
                  SendMessage(pSharedMem^.InstHandle, pSharedMem^.MessageID, 1, WPARAM)
                else if i = 1 then      
                  SendMessage(pSharedMem^.InstHandle, pSharedMem^.MessageID, 2, WPARAM);
                FLastStuTime := GetTickCount;
                Break;
              end
              else   
              begin
                if (GetTickCount - FLastStuTime) > 1000 then
                  SendMessage(pSharedMem^.InstHandle, pSharedMem^.MessageID, 3, WPARAM);
              end;
            end;
          end;
        end
        else  
        begin
          if (GetTickCount - FLastStuTime) > 1000 then
            SendMessage(pSharedMem^.InstHandle, pSharedMem^.MessageID, 3, WPARAM);
        end;
        Result := CallNextHookEx(KHookHandle, nCode, wParam, lParam);
      end;end;
  • 相关阅读:
    什么样的项目适合docker部署,docker应用场景
    算法学习导图+经典排序算法PHP实现
    Xmind激活:亲测有效
    小细节1:mysql数据库中的主键删除后出现自定义主键约束
    java笔试题:找出3~999的水仙花数的三种实现方式
    java笔试题:利用冒泡排序算法找出int类型数组当中最大的数字
    java笔试题:判断一个3~100之间的所有的素数?
    java笔试题:随机生成一个4位数字的年号,判断是否是闰年?
    java笔试题:判断一个小写字母是元音字母还是辅音字母?
    安装Maven方法
  • 原文地址:https://www.cnblogs.com/qq78292959/p/2077086.html
Copyright © 2011-2022 走看看