Windows钩子函数的详细资料

时间:2010-01-31 10:01:03  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:,事实上我的 程序是在他的基础上改写的,他的是从DELPHI HELP中改写出来的。调试程序花了 我两个礼拜,最好你能花同样的时间,那么你就会收获很多! } 第一步,建一DLL,DELPHI中NEW-》DLL SAVE AS GETKEY
  正文:为什么选这个话题?因为跟踪MOUSE坐标很常见,容易又特别不容易,非常说明WINDOWS95下编程的特点。

{ 如果您看不懂,请买Delphi 2 UNLEASHED RMB133,当然他没这个程序,但有一
些写WIN HOOK必须具备的知识。本程序得到AIMING大虾的大力协助,事实上我的
程序是在他的基础上改写的,他的是从DELPHI HELP中改写出来的。调试程序花了
我两个礼拜,最好你能花同样的时间,那么你就会收获很多! }

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


library getKey;

uses
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_NCM
ouseMove, 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
;
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,pCha
  r('_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
    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.
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 //这里引出了公用数据区的指针,你可以在你的应用程序中自由操作它。

Windows钩子函数的详细资料》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/12684.html


关键字:

关于《Windows钩子函数的详细资料》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td