知识大全 在应用程序中跟踪MOUSE的坐标

Posted

篇首语:百艺通,不如一艺精。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在应用程序中跟踪MOUSE的坐标相关的知识,希望对你有一定的参考价值。

在应用程序中跟踪MOUSE的坐标  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  第一步 建一DLL DELPHI中NEW 》DLL SAVE AS GETKEY

library getKey;

usesSysUtils Windows HookMain in hookmain pas;

exportsOpenGetKeyHook CloseGetKeyHook GetPublicP;

beginNextHook := ;procSaveExit := ExitProc;DLLproc := @DLLMain;ExitProc := @HookExit;DLLMain(DLL_PROCESS_ATTACH);end

  第二步 建一UNIT HOOK MAIN 关键在于CreateFileMapping 和 消息 WM_NCMouseMove WM_MOUSEMOVE:

unit HookMain;

interface uses Windows Messages Dialogs SysUtils;

//type DataBuf = Array [ ] of DWORD;type mydata=recorddata :array [ ] of DWORD;data :TMOUSEHOOKSTRUCT;end;var hObject : Thandle;pMem : Pointer; NextHook: Hhook;procSaveExit: Pointer;

function HookHandler(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export; function OpenGetKeyHook(sender : HWND;MessageID : WORD) : BOOL; export; function CloseGetKeyHook: BOOL; export; function GetPublicP : Pointer;stdcall; export; Procedure DLLMain(dwReason:Dword); far; procedure HookExit; far;

implementation

Procedure UnMapMem; begin if Assigned(pMem) then begin UnMapViewOfFile(pMem); pMem := Nil end; end;

Procedure MapMem; begin hObject := CreateFileMapping($FFFFFFFF Nil Page_ReadWrite $FFFF pChar(_IOBuffer)); if hObject = then Raise Exception Create(创建公用数据的Buffer不成? ; pMem := MapViewOfFile(hObject FILE_MAP_WRITE SizeOf(mydata));// or SizeOf(DataBuf) ???? // 创建SizeOf(DataBuf)的数据区if not Assigned(pMem) then begin UnMapMem; Raise Exception Create(创建公用数据的映射关系不成功!); end; end; Procedure DLLMain(dwReason:Dword); far; begin Case dwReason of DLL_PROCESS_ATTACH : begin pMem := nil; hObject := ; MapMem; //以下的公有数据 如tHWND tMessageID将直接使用本Buf End; DLL_PROCESS_DETACH : UnMapMem; DLL_THREAD_ATTACH DLL_THREAD_DETACH :; //缺省 end; end;

procedure HookExit; far; begin CloseGetKeyHook; ExitProc := procSaveExit;end;

function GetPublicP : Pointer;export;begin //这里引出了公用数据区的指针 你可以在你的应用程序中自由操作它 但建议去掉此接口 Result := pMem;end;

function HookHandler(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;beginResult := ;If iCode $#@ ; Then Result := CallNextHookEx(NextHook iCode wParam lParam);

// This is probably closer to what you would want to do Case wparam ofWM_LBUTTONDOWN:beginend;WM_LBUTTONUP:beginend;WM_LBUTTONDBLCLK:beginend;WM_RBUTTONDOWN:beginmessagebeep( );end;WM_RBUTTONUP:beginend;WM_RBUTTONDBLCLK:beginend;WM_MBUTTONDOWN:beginend;WM_MBUTTONUP:beginend;WM_MBUTTONDBLCLK:beginend;WM_NCMouseMove WM_MOUSEMOVE:beginmydata(pmem^) data :=pMOUSEHOOKSTRUCT(lparam)^;// messagebeep( );//SendMessage(DataBuf(pMem^)[ ] DataBuf(pMem^)[ ] wParam lParam );SendMessage(mydata(pMem^) data [ ] mydata(pMem^) data [ ] wParam integer(@(mydata(pmem^) data )) );end;end; //发送消息end;

function OpenGetKeyHook(sender : HWND;MessageID : WORD) : BOOL; export;beginResult := False;if NextHook $#@ ;$#@ ; then Exit; //已经安装了本钩子// DataBuf(pMem^)[ ] := Sender; //填数据区// DataBuf(pMem^)[ ] := MessageID; //填数据区mydata(pmem^) data [ ]:=sender;mydata(pmem^) data [ ]:=messageid;

NextHook := SetWindowsHookEx(WH_mouse HookHandler Hinstance );Result := NextHook $#@ ;$#@ ; ; end;

function CloseGetKeyHook: BOOL; export; begin if NextHook $#@ ;$#@ ; then begin UnhookWindowshookEx(NextHook); //把钩子链链接到下一个钩子处理上 NextHook := ; end; Result := NextHook = ; end;

end

  第三步 测试DLL 建一PROJECT 关键在于override WndProc

unit Unit ;

interface

usesWindows Messages SysUtils Classes Graphics Controls Forms Dialogs StdCtrls ExtCtrls;

typeTForm = class(Tform)uncapture: Tbutton;capture: Tbutton;Exit: Tbutton;Panel : Tpanel;show: Tlabel;

Label : Tlabel;counter: Tlabel;procedure ExitClick(Sender: Tobject);procedure uncaptureClick(Sender: Tobject);procedure captureClick(Sender: Tobject);private Private declarations public Public declarations procedure WndProc(var Message: Tmessage); override;end;

varForm : TForm ;var num : integer; const MessageID = WM_User + ;implementation

$R * DFMfunction OpenGetKeyHook(sender : HWND;MessageID : WORD) : BOOL; external GetKey DLL; function CloseGetKeyHook: BOOL; external GetKey DLL;

procedure TForm ExitClick(Sender: Tobject);beginclose;end;

procedure TForm uncaptureClick(Sender: Tobject);beginif CloseGetKeyHook then //ShowMessage(结束记录 );show caption:=结束记录 ;end;

procedure TForm captureClick(Sender: Tobject);begin// if OpenGetKeyHook(self Handle MessageID) then ShowMessage(开始记录 );

if OpenGetKeyHook(Form Handle MessageID) then//ShowMessage(开始记录 );show caption:=开始记录 ;num := ;

end;

procedure TForm WndProc(var Message: Tmessage);var x y:integer;beginif Message Msg = MessageID thenbegin// Panel Caption := IntToStr(Num);x:=PMouseHookStruct( message lparam)^ pt x ;y:=PMouseHookStruct( message lparam)^ pt y ;

panel caption:=x=+inttostr(x)+ y=+inttostr(y);inc(Num);counter Caption := IntToStr(Num);endelse Inherited;end;

cha138/Article/program/Delphi/201311/24762

相关参考

知识大全 .Net 下跟踪线程挂起和程序死循环

.Net下跟踪线程挂起和程序死循环  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  下的程序调试相

知识大全 js获取元素到文档区域document的坐标方法

  获取页面中元素到文档区域document的横向纵向坐标的两种方法及其比较  在js控制元素运动的过程中对于页面元素坐标位置的获取是经常用到的这里主要总结下两种方法  一通过叠加元素对象和它的off

知识大全 怎样在Visual C# .NET 中跟踪和调试(1)

怎样在VisualC#.NET中跟踪和调试(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

分段控制方法在油田污水处理中的应用

摘要:针对老油田原有污水处理工艺和设备,提出污水处理“分段控制分段达标”管理办法,将污水处理系统分为几个控制分段,在每个控制分段限定出口污水含油、机杂的指标,进行水质化验跟踪,实现每一控制分段水质分别

分段控制方法在油田污水处理中的应用

摘要:针对老油田原有污水处理工艺和设备,提出污水处理“分段控制分段达标”管理办法,将污水处理系统分为几个控制分段,在每个控制分段限定出口污水含油、机杂的指标,进行水质化验跟踪,实现每一控制分段水质分别

分段控制方法在油田污水处理中的应用

摘要:针对老油田原有污水处理工艺和设备,提出污水处理“分段控制分段达标”管理办法,将污水处理系统分为几个控制分段,在每个控制分段限定出口污水含油、机杂的指标,进行水质化验跟踪,实现每一控制分段水质分别

球面坐标系概说

为了确定一个地点在地球上的位置,人们设置地理坐标系;同理,为了确定天体在天球上的位置,需要设置天球坐标系。地理坐标系和天球坐标系,都是球面坐标系。在天文学上,根据不同的需要,使用不同的天球坐标系。各种

知识大全 现实问题的细粒度审计,第 3 部分

  在本系列的前两个部分中我向您介绍了细粒度审计(FGA)的概念它用来在OracleiDatabase和更高版本中跟踪选定的语句我还说明了如何在复杂的环境中(比如说在一个Web应用程序内部)通过应用程

黄道坐标

一种“天文坐标”。天体在天球上的位置由黄经和黄纬两个坐标表示。春分点的黄经圈与通过某一天体的黄经圈在黄极所成的角度,或在黄道上所夹的弧长,叫做该天体的黄经。计量方向为在黄道上由春分点起,沿着与太阳周年

知识大全 获取鼠标的坐标

  viewplainprint?  「在窗体上获取相对于屏幕的坐标」  方法publicclassWin[StructLayout(LayoutKindSequential)]publicstruc