程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 帖個HOOK鼠標滾輪滾動的DLL

帖個HOOK鼠標滾輪滾動的DLL

編輯:Delphi
帖個HOOK鼠標滾輪滾動的DLL。(我很菜,大家板磚少點,謝謝合作!!)
  
  //====================================
  library hookprj;
  uses
    SysUtils,
    Classes,
    Unit1 in 'Unit1.pas';
  exports
  EnableMsgHook,  //只要把這兩個函數輸出就可以了,
  DisableMsgHook;//
  begin
  end.
  //====================================
  
  
  //====================================
  unit Unit1;

  interface

  uses
  Windows,Messages;

  var
  HookHandle:  HHOOK;//鉤子的句柄值。
  
  function  MsgHookProc(Code: Integer; WParam: Longint;Msg:Longint):  LRESULT;stdcall;
  //鼠標鉤子的回調函數,即是用它來處理得到消息後要干什麼。。
  //nCode參數是Hook的標志,一般只關心小於0時。
  //WParam參數表示鼠標消息的類型
  //LParam參數是一個指向  TMOUSEHOOKSTRUCT  結構的指針。結構包含了鼠標消息的狀態,我只用了hwnd一個
  //即鼠標消息要傳遞給的窗口句柄。
  //返回值如果不是0的話Windows就把這個消息丟掉,其它的程序就不會再收到這個消息了。

  function  EnableMsgHook:Boolean;  stdcall;  export;
  function  DisableMsgHook:Boolean;  stdcall;  export;//兩個函數都是Boolean類型,成功都是返回True
  implementation
  
  function  MsgHookProc(Code: Integer; WParam: Longint;Msg:Longint):  LRESULT;stdcall;
  begin
   if (Code = HC_ACTION) then
      if PMsg(Msg)^.Message = WM_MOUSEWHEEL then  //鼠標滾動
      begin
        if HIWord(PMsg(Msg)^.wParam)=120 then        // 上滾
        begin
              //做你想做的。
              ShowWindow (pmsg(msg)^.hwnd,SW_MAXIMIZE );
        end;
  
        if HIWord(PMsg(Msg)^.wParam)<>120 then        // 下滾
        begin
              //做你想做的。
              ShowWindow (pmsg(msg)^.hwnd,SW_RESTORE );     
        end;
        PMsg(Msg)^.Message := 0;
      end;
      Result :=CallNextHookEx(HookHandle, Code, WParam, Longint(@Msg));
  end;

  function  EnableMsgHook:Boolean;  stdcall;  export;
  begin
  if  HookHandle  =  0  then  //為了安全,必須判斷一下再設置鉤子。
  Begin
  //  第三個參數的Hinstance  在Delphi中有定義,用就可以了。第四個參數必須為0
  HookHandle  :=  SetWindowsHookEx(WH_GETMESSAGE,@MsgHookProc,Hinstance,0);
  Result  :=  True;
  end
  else
  Result  :=  False;
  end;

  function  DisableMsgHook:Boolean;  stdcall;  export;
  begin
  if  HookHandle <>  0  then  //如果有鉤子就卸掉他。
  begin
  UnHookWindowsHookEx(HookHandle);
  HookHandle  :=  0;
  Result  :=  True;
  end
  else
  Result  :=  False;
  end;

  end.

  //====================================
  
  接口函數是EnableMsgHook和,DisableMsgHook。怎麼用,大家應該清楚吧,本人對Delphi比較菜,有不好的地方望大家指出,改正!!!


  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved