Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1257942
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-02-03 09:54:29



Hook.dll代码在我今天发的第一个帖子中  
   
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          Memo1:   TMemo;  
          Memo2:   TMemo;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   WMCOPYDATA(Var   Msg:TMessage);message   WM_COPYDATA;  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
      function   StartSpyMessage(AHSpyWnd,   AHRevWnd:   THandle):   Boolean;   stdcall;external   'hook.dll';  
      procedure   StopSpyMessage;stdcall;external   'hook.dll';  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      MWnd:THandle;  
      CWnd:THandle;  
      EWnd:THandle;  
  begin  
      memo1.Lines.Clear;  
      MWnd:=FindWindow(nil,'BMML   Window:   COM1   Stack');     //获取窗口句柄  
      CWnd:=FindWindowEx(MWnd,0,'AfxMDIFrame40',nil);       //获取一级句柄  
      EWnd:=FindWindowEx(CWnd,0,'Edit',nil);                         //获取Edit控件句柄  
   
      If   EWnd=0   then  
          showmessage('程序没运行')  
      Else  
          memo1.Lines.Add(inttostr(EWnd));  
   
      if   StartSpyMessage(EWnd,form1.Handle)   then  
            showmessage('启动成功');  
  end;  
   
  procedure   TForm1.WMCOPYDATA(var   Msg:   TMessage);  
  Var  
      Data:CopyDataStruct;  
      S:String;  
  begin  
      Data:=PCopyDataStruct(Msg.LParam)^;  
      with   Data   do  
      Begin  
          S:='数据类别代码'+inttostr(cbData)+'       '+'消息实际数据'+PChar(lpData);  
      end;  
      Memo2.Lines.Add(s);  
  end;  
   
  end.

该程序的确可以拦截那个程序中Edit控件的消息,但显示的却为空的  
   
  里面主要是用到WM_COPYDATA消息来传递我要的消息,因为对消息操作不熟悉,所以不知道在怎么写了  
  Hook.dll中拦截到消息以后,通过WM_COPYDATA消息发送到我的主程序  
  在主程序中我写了一个消息过程,也的确是收到效果,可就是得到的是空的,麻烦高手们帮我看看问题出在那里了

阅读(407) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~