利用HOOK建立鼠標增強程序(DELPHI)_第1頁
利用HOOK建立鼠標增強程序(DELPHI)_第2頁
利用HOOK建立鼠標增強程序(DELPHI)_第3頁
利用HOOK建立鼠標增強程序(DELPHI)_第4頁
利用HOOK建立鼠標增強程序(DELPHI)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、利用HOOK建立鼠標增強程序(DELPHI)在Windows系統(tǒng)中提供了一種系統(tǒng)消息掛鉤的(Message hook)功能,使用消息掛鉤,可以實時監(jiān)視處理系統(tǒng)中的各種消息。很多鼠標增強軟件就是利用消息掛鉤來攔截所有的鼠標消息進行處理的。要設置鼠標消息掛鉤,一般先建立一個使用鼠標消息掛鉤的動態(tài)連接庫(DLL)文件,然后就可以在其它程序中使用這個DLL文件處理鼠標消息。下面的程序介紹通過鼠標消息掛鉤監(jiān)視鼠標消息,從而實現(xiàn)類似于一些鼠標增強軟件一樣的使窗口上下左右滾動的功能。1建立動態(tài)連接庫選擇菜單 File|New ,選擇DLL產(chǎn)生一個DLL模版,保存為 MHook.Dprfile:/MHook.

2、Dpr源程序library MHook;usesSysUtils,Classes,hkproc in 'hkproc.pas'exportsEnableMouseHook,DisableMouseHook;beginhNextHookProc:=0;procSaveExit:=ExitProc;ExitProc:=HotKeyHookExit;end.再選擇菜單 File|New ,選擇Unit建立一個Pas文件,保存為 HKProc.pasfile:/HKProc.pas源程序unit hkproc;interfaceusesWindows,Messages;constMov

3、e_Up = 0;Move_Down=1;Move_Left=2;Move_Right=3;varhNextHookProc: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 DisableMo

4、useHook:BOOL;export;function GetDirect(FPoint : TPoint;LPoint : TPoint):integer;procedure HotKeyHookExit;far;implementationfile:/GetDirect函數(shù)根據(jù)光標的移動決定窗口滾動的方向。function GetDirect(FPoint : TPoint;LPoint : TPoint):integer;variWidth,iHeight:integer;beginiWidth:=LPoint.x-FPoint.x;iHeight:=lPoint.y-FPoint.y

5、;Result:=-1;if (iWidth=0)or(iHeight=0)thenexit;if (abs(iWidth) div abs(iHeight)>=2) thenif iWidth<0 then file:/Move to leftResult:=Move_LeftelseResult:=Move_Rightelse if (abs(iHeight) div abs(iWidth)>=2) thenif iHeight<0 then file:/Move to topResult:=Move_UpelseResult:=Move_Down;end;func

6、tion MouseProc(iCode:Integer;wParam:WPARAM;lParam:Pointer):LRESULT; stdcall;export;varpMouse:MOUSEHOOKSTRUCT;l:integer;beginfile:/如果用戶按下鼠標右鍵同時Scroll Lock鍵為按下狀態(tài)則file:/滾動窗口。if (wParam=WM_RBUTTONDOWN) and Boolean(GetKeyState(145) thenbeginpMouse:=lParam;l:=GetDirect(lPoint,pMouse.pt);if l>=0 thenM_D

7、irect:=l;lPoint:=pMouse.pt;NowWindow:=WindowFromPoint(lPoint);if M_Direct=Move_Up thenSendMessage(NowWindow,WM_VSCROLL,SB_PAGEUP,0)else if M_Direct=Move_Down thenSendMessage(NowWindow,WM_VSCROLL,SB_PAGEDOWN,0)else if M_Direct=Move_Left thenSendMessage(NowWindow,WM_HSCROLL,SB_PAGELEFT,0)else if M_Dir

8、ect=Move_Right thenSendMessage(NowWindow,WM_HSCROLL,SB_PAGERIGHT,0);Result:=1;exit;endelse if (wParam=WM_RBUTTONUP) and Boolean(GetKeyState(145) thenResult:=1elsebeginResult:=0;if iCode<0 thenbeginResult:=CallNextHookEx(hNextHookProc,iCode,wParam,integer(lParam);Exit;end;end;end;function EnableMo

9、useHook(WndHandle:integer):BOOL;export;beginGetCursorPos(lPoint);Result:=False;if hNextHookProc<>0 thenexit;file:/設置Mouse hookhNextHookProc:=SetWindowsHookEx(WH_MOUSE,MouseProc,Hinstance,0);Result:=hNextHookProc<>0;end;function DisableMouseHook:BOOL;export;beginif hNextHookProc<>0

10、thenbeginUnHookWindowsHookEx(hNextHookProc);hNextHookProc:=0;end;Result:=hNextHookProc=0;end;procedure HotKeyHookExit;beginif hNextHookProc<>0 thenDisableMouseHook;ExitProc:=procSaveExit;end;end.在菜單中選擇 Project|Build MHook建立DLL文件。2建立程序調用動態(tài)連接庫在這里我們還是使用Delphi建立程序,當然也可以使用諸如VB等調用動態(tài)連接庫。在菜單中選 File|Ne

11、w Application建立一個新程序,將工程文件保存為Project1.dprfile:/project1的源程序program Project1;usesForms,Sample1 in 'Sample1.pas' Form1;$R *.RESbeginApplication.Initialize;file:/隱藏窗口Application.ShowMainForm := False;Application.CreateForm(TForm1, Form1);Application.Run;end.將Form1的源程序文件保存成Sample1.pasfile:/Form1

12、的源程序unit Sample1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Menus, ImgList,ShellApi, ExtCtrls;constWM_ICONMESSAGE=WM_USER+$100;typeTForm1 = class(TForm)procedure FormClose(Sender: TObject; var Action: TCloseAction);procedure FormCreate(Sender: TOb

13、ject);privateprocedure WMBarIcon(var Message:TMessage);message WM_ICONMESSAGE;publicend;function EnableMouseHook(WndHandle:integer):BOOL;external 'MHook.DLL'function DisableMouseHook:BOOL;external'MHook.DLL'varForm1: TForm1;implementation$R *.DFMprocedure TForm1.WMBarIcon (var Messag

14、e:TMessage);beginfile:/用戶雙擊任務欄圖標則關閉程序if Message.LParam = WM_LBUTTONDBLCLK thenclose;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);varlpData:PNotifyIconData;beginfile:/刪除任務欄圖標lpData := new(PNotifyIconDataA);lpData.cbSize := 88;/SizeOf(PNotifyIconDataA);lpData.Wnd := Form1.

15、Handle;lpData.hIcon := Form1.Icon.Handle;lpData.uCallbackMessage := WM_ICONMESSAGE;lpData.uID :=0;lpData.szTip := '鼠標演示'lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;Shell_NotifyIcon(NIM_DELETE,lpData);dispose(lpData);file:/解除Mouse hookDisableMouseHook;end;procedure TForm1.FormCreate(S

16、ender: TObject);varlpData:PNotifyIconData;beginEnableMouseHook(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 := '鼠標演示'lpData.uFlags :=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論