• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

        運用HOOK創(chuàng)建鼠標(biāo)增強程序

        運用HOOK創(chuàng)建鼠標(biāo)增強程序

        更新時間:2022-05-01 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        在Windows系統(tǒng)中提供了一種系統(tǒng)消息掛鉤的(Message hook)功能,使用消息掛鉤,可以實時監(jiān)視處理系統(tǒng)中的各種消息。很多鼠標(biāo)增強軟件就是利用消息掛鉤來攔截所有的鼠標(biāo)消息進行處理的。
        要設(shè)置鼠標(biāo)消息掛鉤,一般先建立一個使用鼠標(biāo)消息掛鉤的動態(tài)連接庫(DLL)文件,然后就可以在其它程序中使用這個DLL文件處理鼠標(biāo)消息。
        下面的程序介紹通過鼠標(biāo)消息掛鉤監(jiān)視鼠標(biāo)消息,從而實現(xiàn)類似于一些鼠標(biāo)增強軟件一樣的使窗口上下左右滾動的功能。

        1.建立動態(tài)連接庫
        選擇菜單 File|New ,選擇DLL產(chǎn)生一個DLL模版,保存為 MHook.Dpr
        //MHook.Dpr源程序
        library MHook;

        uses
        SysUtils,
        Classes,
        hkproc in 'hkproc.pas';

        exports
        EnableMouseHook,
        DisableMouseHook;

        begin
        hNextHookProc:=0;
        procSaveExit:=ExitProc;
        ExitProc:=@HotKeyHookExit;
        end.

        再選擇菜單 File|New ,選擇Unit建立一個Pas文件,保存為 HKProc.pas
        //HKProc.pas源程序
        unit hkproc;

        interface
        uses
        Windows,Messages;
        const
        Move_Up = 0;

        Move_Down=1;
        Move_Left=2;
        Move_Right=3;
        var
        hNextHookProc:HHook;
        procSaveExit:Pointer;
        M_Direct:Integer;
        LPoint:TPoint;
        NowWindow:Integer;

        function MouseProc(iCode:Integer;wParam:WPARAM;
        lParam:Pointer):LRESULT; stdcall;export;
        function EnableMouseHook(WndHandle:integer):BOOL;export;

        function DisableMouseHook:BOOL;export;
        function GetDirect(FPoint : TPoint;LPoint : TPoint):integer;
        procedure HotKeyHookExit;far;

         

        implementation

        //GetDirect函數(shù)根據(jù)光標(biāo)的移動決定窗口滾動的方向。
        function GetDirect(FPoint : TPoint;LPoint : TPoint):integer;
        var
        iWidth,iHeight:integer;
        begin
        iWidth:=LPoint.x-FPoint.x;
        iHeight:=lPoint.y-FPoint.y;
        Result:=-1;

        if ((iWidth=0)or(iHeight=0))then
        exit;

        if ((abs(iWidth) div abs(iHeight))>=2) then
        if iWidth<0 then //Move to left
        Result:=Move_Left
        else
        Result:=Move_Right

        else if ((abs(iHeight) div abs(iWidth))>=2) then
        if iHeight<0 then //Move to top
        Result:=Move_Up
        else
        Result:=Move_Down;

        end;

        function MouseProc(iCode:Integer;wParam:WPARAM;
        lParam:Pointer):LRESULT; stdcall;export;
        var
        pMouse:^MOUSEHOOKSTRUCT;
        l:integer;
        begin
        //如果用戶按下鼠標(biāo)右鍵同時Scroll Lock鍵為按下狀態(tài)則
        //滾動窗口。
        if ((wParam=WM_RBUTTONDOWN) and Boolean(GetKeyState(145))) then
        begin
        pMouse:=lParam;
        l:=GetDirect(lPoint,pMouse.pt);
        if l>=0 then
        M_Direct:=l;
        lPoint:=pMouse.pt;

        NowWindow:=WindowFromPoint(lPoint);
        if M_Direct=Move_Up then
        SendMessage(NowWindow,WM_VSCROLL,SB_PAGEUP,0)
        else if M_Direct=Move_Down then

        SendMessage(NowWindow,WM_VSCROLL,SB_PAGEDOWN,0)
        else if M_Direct=Move_Left then
        SendMessage(NowWindow,WM_HSCROLL,SB_PAGELEFT,0)
        else if M_Direct=Move_Right then
        SendMessage(NowWindow,WM_HSCROLL,SB_PAGERIGHT,0);
        Result:=1;
        exit;
        end
        else if ((wParam=WM_RBUTTONUP) and Boolean(GetKeyState(145))) then
        Result:=1
        else
        begin
        Result:=0;
        if iCode<0 then
        begin
        Result:=CallNextHookEx(hNextHookProc,iCode,wParam,
        integer(lParam));
        Exit;
        end;
        end;
        end;

        function EnableMouseHook(WndHandle:integer):BOOL;export;
        begin
        GetCursorPos(lPoint);
        Result:=False;
        if hNextHookProc<>0 then
        exit;
        //設(shè)置Mouse hook
        hNextHookProc:=SetWindowsHookEx(WH_MOUSE,@MouseProc,
        Hinstance,0);
        Result:=hNextHookProc<>0;
        end;

        function DisableMouseHook:BOOL;export;
        begin
        if hNextHookProc<>0 then
        begin
        UnHookWindowsHookEx(hNextHookProc);
        hNextHookProc:=0;
        end;
        Result:=hNextHookProc=0;
        end;

        procedure HotKeyHookExit;
        begin
        if hNextHookProc<>0 then
        DisableMouseHook;
        ExitProc:=procSaveExit;
        end;

        end.
        在菜單中選擇 Project|Build MHook建立DLL文件。

        2.建立程序調(diào)用動態(tài)連接庫
        在這里我們還是使用Delphi建立程序,當(dāng)然也可以使用諸如VB等調(diào)用動態(tài)連接庫。
        在菜單中選 File|New Application建立一個新程序,將工程文件保存為Project1.dpr

        //project1的源程序
        program Project1;

        uses
        Forms,
        Sample1 in 'Sample1.pas' {Form1};

        {$R *.RES}

        begin
        Application.Initialize;
        //隱藏窗口
        Application.ShowMainForm := False;

        Application.CreateForm(TForm1, Form1);
        Application.Run;
        end.

        將Form1的源程序文件保存成Sample1.pas

        //Form1的源程序
        unit Sample1;

        interface

        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
        StdCtrls, Menus, ImgList,ShellApi, ExtCtrls;

        const
        WM_ICONMESSAGE=WM_USER+$100;


        type
        TForm1 = class(TForm)

        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCreate(Sender: TObject);
        private
        procedure WMBarIcon(var Message:TMessage);message WM_ICONMESSAGE;

        public

        end;

        function EnableMouseHook(WndHandle:integer):BOOL;external 'MHook.DLL';
        function DisableMouseHook:BOOL;external'MHook.DLL';

        var
        Form1: TForm1;

        implementation

        {$R *.DFM}


        procedure TForm1.WMBarIcon (var Message:TMessage);
        begin
        //用戶雙擊任務(wù)欄圖標(biāo)則關(guān)閉程序
        if Message.LParam = WM_LBUTTONDBLCLK then
        close;
        end;

        procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
        var
        lpData:PNotifyIconData;
        begin
        //刪除任務(wù)欄圖標(biāo)
        lpData := new(PNotifyIconDataA);
        lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
        lpData.Wnd := Form1.Handle;
        lpData.hIcon := Form1.Icon.Handle;
        lpData.uCallbackMessage := WM_ICONMESSAGE;
        lpData.uID :=0;
        lpData.szTip := '鼠標(biāo)演示';
        lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
        Shell_NotifyIcon(NIM_DELETE,lpData);
        dispose(lpData);
        //解除Mouse hook
        DisableMouseHook;
        end;

        procedure TForm1.FormCreate(Sender: TObject);
        var
        lpData:PNotifyIconData;
        begin
        EnableMouseHook(Form1.Handle);
        Form1.Visible := False;
        lpData := new(PNotifyIconDataA);
        lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
        lpData.Wnd := Form1.Handle;
        lpData.hIcon := Form1.Icon.Handle;
        lpData.uCallbackMessage := WM_ICONMESSAGE;
        lpData.uID :=0;
        lpData.szTip := '鼠標(biāo)演示';
        lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
        Shell_NotifyIcon(NIM_ADD,lpData);
        dispose(lpData);
        end;

        end.

        運行程序,按下Scroll Lock鍵使其有效,將光標(biāo)移動到文本窗口中(如IE、Word),移動鼠標(biāo),點擊鼠標(biāo)右鍵,窗口就可以依上一次移動的方向滾動。
        利用上面的原理,將程序做一些改動,就可以象專業(yè)的鼠標(biāo)增強程序一樣做出例如縮放窗口,運行程序等很多鼠標(biāo)增強效果來。
        上面的程序在Windows95,Delphi4.0下運行通過。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 亚洲av成人一区二区三区在线观看| 日韩在线不卡免费视频一区| 国产啪精品视频网免费| 色播亚洲视频在线观看| 亚洲黄色免费网址| 亚洲性无码av在线| 无码免费午夜福利片在线| 最新国产成人亚洲精品影院| 国产片AV片永久免费观看| 亚洲资源最新版在线观看| 最近中文字幕免费mv视频7| 亚洲AV成人精品日韩一区| 好看的电影网站亚洲一区| baoyu122.永久免费视频| 久久亚洲伊人中字综合精品| 98精品全国免费观看视频| 亚洲国产综合精品| 好爽…又高潮了毛片免费看| 一级毛片大全免费播放下载| av无码免费一区二区三区| 亚洲乱码日产精品BD在线观看| 免费做爰猛烈吃奶摸视频在线观看 | 久久青青草原亚洲av无码app| 99re这里有免费视频精品| 色偷偷亚洲女人天堂观看欧| 日韩电影免费在线观看视频| 一出一进一爽一粗一大视频免费的 | 亚洲伊人精品综合在合线| 成人永久免费高清| 中文字幕无码毛片免费看| 亚洲成综合人影院在院播放| 麻豆国产VA免费精品高清在线| 一级女性全黄生活片免费看| 久久久无码精品亚洲日韩蜜臀浪潮| 毛片基地免费观看| www免费插插视频| 亚洲宅男精品一区在线观看| 亚洲?V乱码久久精品蜜桃| 99精品在线免费观看| 小说区亚洲自拍另类| 久久精品国产亚洲AV果冻传媒|