我是参照http://www.sudu.cn/info/html/edu/code/20071227/54127.html
function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
  dwSize: cardinal;
begin
  //这儿进行接收的数据处理
  MessageBeep(1000); //简单的响一声
  //调用直正的Recv函数
  showmessage(pchar(@buf));
  WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
  Result := OldRecv(S, Buf, len, flags);
  JmpCode.Address := @MyRecv;
  WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);
end;
为什么MyRecv接收却拦截不到呢,发送倒是可以

解决方案 »

  1.   

    好像N久前就回答过这个问题。  // 先调用原来的过程进行数据接受
      WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize); 
      Result := OldRecv(S, Buf, len, flags); 
      JmpCode.Address := @MyRecv; 
      WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);     //这儿进行接收的数据处理 
      MessageBeep(1000); //简单的响一声 
      //调用直正的Recv函数 
      showmessage(pchar(@buf));