飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3149|回复: 0

HOOK鼠标滚轮滚动的DLL

[复制链接]
  • TA的每日心情
    开心
    2019-9-19 16:05
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2007-2-8 09:51:06 | 显示全部楼层 |阅读模式
    帖个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比较菜,有不好的地方望大家指出,改正!!!


    [ 本帖最后由 Moodsky 于 2007-2-8 10:14 编辑 ]
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表