当前位置:首页 > 网络编程 > 软件语言 > DELPHI > 在应用程序中跟踪MOUSE的坐标

在应用程序中跟踪MOUSE的坐标

点击次数:34 次 发布日期:2008-11-09 08:41:54 作者:源代码网
源代码网推荐
广告载入中
第一步,建一DLL,DELPHI中NEW-》DLL SAVE AS GETKEY
源代码网推荐
源代码网推荐 library getKey;
源代码网推荐
源代码网推荐 uses
源代码网推荐 SysUtils,
源代码网推荐 Windows,
源代码网推荐 HookMain in hookmain.pas;
源代码网推荐
源代码网推荐 exports
源代码网推荐 OpenGetKeyHook,
源代码网推荐 CloseGetKeyHook,
源代码网推荐 GetPublicP;
源代码网推荐
源代码网推荐 begin
源代码网推荐 NextHook := 0;
源代码网推荐 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 [1..2] of DWORD;
源代码网推荐 type mydata=record
源代码网推荐 data1:array [1..2] of DWORD;
源代码网推荐 data2: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;

软件开发网 www.mscto.com


源代码网推荐 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,0,$FFFF,pChar(_IOBuffer));
源代码网推荐 if hObject = 0 then Raise Exception.Create(创建公用数据的Buffer不成? ;
源代码网推荐 pMem := MapViewOfFile(hObject,FILE_MAP_WRITE,0,0,SizeOf(mydata));
源代码网推荐 // 1 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 := 0;
源代码网推荐 MapMem; //以下的公有数据,如tHWND,tMessageID将直接使用本Buf. 软件开发网 www.mscto.com
源代码网推荐 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;
源代码网推荐 begin
源代码网推荐 Result := 0;
源代码网推荐 If iCode $#@60; 0
源代码网推荐 Then Result := CallNextHookEx(NextHook, iCode, wParam, lParam);
源代码网推荐
源代码网推荐
源代码网推荐 // This is probably closer to what you would want to do...
源代码网推荐 Case wparam of
源代码网推荐 WM_LBUTTONDOWN:
源代码网推荐 begin
源代码网推荐 end;
源代码网推荐 WM_LBUTTONUP:
源代码网推荐 begin
源代码网推荐 end;
源代码网推荐 WM_LBUTTONDBLCLK:
源代码网推荐 begin
源代码网推荐 end;
源代码网推荐 WM_RBUTTONDOWN:
源代码网推荐 begin
源代码网推荐 messagebeep(1);
源代码网推荐 end;
源代码网推荐 WM_RBUTTONUP:
源代码网推荐 begin
源代码网推荐 end;
源代码网推荐 WM_RBUTTONDBLCLK:
源代码网推荐 begin
源代码网推荐 end;
源代码网推荐 WM_MBUTTONDOWN:
源代码网推荐 begin
源代码网推荐 end;
源代码网推荐 WM_MBUTTONUP:
源代码网推荐 begin


源代码网推荐 end;
源代码网推荐 WM_MBUTTONDBLCLK:
源代码网推荐 begin
源代码网推荐 end;
源代码网推荐 WM_NCMouseMove, WM_MOUSEMOVE:
源代码网推荐 begin
源代码网推荐 mydata(pmem^).data2:=pMOUSEHOOKSTRUCT(lparam)^;
源代码网推荐 // messagebeep(1);
源代码网推荐 //SendMessage(DataBuf(pMem^)[1],DataBuf(pMem^)[2],wParam,lParam );
源代码网推荐 SendMessage(mydata(pMem^).data1[1],mydata(pMem^).data1[2],wParam,integer(@(mydata(pmem^).data2)) );
源代码网推荐 end;
源代码网推荐 end; //发送消息
源代码网推荐 end;
源代码网推荐
源代码网推荐 function OpenGetKeyHook(sender : HWND;MessageID : WORD) : BOOL; export;
源代码网推荐 begin
源代码网推荐 Result := False;
源代码网推荐 if NextHook $#@60;$#@62; 0 then Exit; //已经安装了本钩子
源代码网推荐 // DataBuf(pMem^)[1] := Sender; //填数据区
源代码网推荐 // DataBuf(pMem^)[2] := MessageID; //填数据区
源代码网推荐 mydata(pmem^).data1[1]:=sender;
源代码网推荐 mydata(pmem^).data1[2]:=messageid;
源代码网推荐
源代码网推荐 NextHook := SetWindowsHookEx(WH_mouse, HookHandler, Hinstance, 0);
源代码网推荐 Result := NextHook $#@60;$#@62; 0;
源代码网推荐 end;
源代码网推荐
源代码网推荐 function CloseGetKeyHook: BOOL; export;
源代码网推荐 begin
源代码网推荐 if NextHook $#@60;$#@62; 0 then
源代码网推荐 begin
源代码网推荐 UnhookWindowshookEx(NextHook); //把钩子链链接到下一个钩子处理上.


源代码网推荐 NextHook := 0;
源代码网推荐 end;
源代码网推荐 Result := NextHook = 0;
源代码网推荐 end;
源代码网推荐
源代码网推荐 end.
源代码网推荐
源代码网推荐
源代码网推荐
源代码网推荐 第三步,测试DLL,建一PROJECT。关键在于override WndProc
源代码网推荐
源代码网推荐 unit Unit1;
源代码网推荐
源代码网推荐 interface
源代码网推荐
源代码网推荐 uses
源代码网推荐 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
源代码网推荐 StdCtrls, ExtCtrls;
源代码网推荐
源代码网推荐 type
源代码网推荐 TForm1 = class(Tform)
源代码网推荐 uncapture: Tbutton;
源代码网推荐 capture: Tbutton;
源代码网推荐 Exit: Tbutton;
源代码网推荐 Panel1: Tpanel;
源代码网推荐 show: Tlabel;
源代码网推荐
源代码网推荐 Label1: 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;
源代码网推荐
源代码网推荐 var
源代码网推荐 Form1: TForm1;
源代码网推荐 var num : integer;
源代码网推荐 const MessageID = WM_User 100;
源代码网推荐 implementation
源代码网推荐
源代码网推荐 {$R *.DFM}
源代码网推荐 function OpenGetKeyHook(sender : HWND;MessageID : WORD) : BOOL; external GetKey.DLL;
源代码网推荐 function CloseGetKeyHook: BOOL; external GetKey.DLL;
源代码网推荐
源代码网推荐 procedure TForm1.ExitClick(Sender: Tobject);
源代码网推荐 begin
源代码网推荐 close;
源代码网推荐 end;
源代码网推荐
源代码网推荐 procedure TForm1.uncaptureClick(Sender: Tobject);
源代码网推荐 begin
源代码网推荐 if CloseGetKeyHook then //ShowMessage(结束记录...);
源代码网推荐 show.caption:=结束记录...;
源代码网推荐 end;
源代码网推荐
源代码网推荐 procedure TForm1.captureClick(Sender: Tobject);
源代码网推荐 begin
源代码网推荐 // if OpenGetKeyHook(self.Handle,MessageID) then ShowMessage(开始记录...);
源代码网推荐
源代码网推荐 if OpenGetKeyHook(Form1.Handle,MessageID) then
源代码网推荐 //ShowMessage(开始记录...);
源代码网推荐 show.caption:=开始记录...;
源代码网推荐 num := 0;
源代码网推荐
源代码网推荐
源代码网推荐 end;
源代码网推荐
源代码网推荐 procedure TForm1.WndProc(var Message: Tmessage);
源代码网推荐 var x,y:integer;
源代码网推荐 begin
源代码网推荐 if Message.Msg = MessageID then
源代码网推荐 begin
源代码网推荐 // Panel1.Caption := IntToStr(Num);
源代码网推荐 x:=PMouseHookStruct( message.lparam)^.pt.x ;
源代码网推荐 y:=PMouseHookStruct( message.lparam)^.pt.y ;
源代码网推荐
源代码网推荐 panel1.caption:=x= inttostr(x) y= inttostr(y);
源代码网推荐 inc(Num);
源代码网推荐 counter.Caption := IntToStr(Num);
源代码网推荐 end
源代码网推荐 else Inherited;
源代码网推荐 end;
源代码网推荐
源代码网推荐 end.


源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华