怎么样才能截获浏览器发送的ip地址?
希望能给些代码 以高分回馈

解决方案 »

  1.   

    自己做一个本地的代理服务器,让IE通过它出去。
    我写过一个针对 bbs.mydrivers.com ,通过修改数据包,我的虚拟货币现在多的吓人了。
      

  2.   

    pazee(耙子) 怎么做啊?说来听听吧
      

  3.   

    是呀 pazee(耙子) 能不能把代码贴出来看看啊
      

  4.   

    hehe 
    有谁知道本地代理服务器怎么写啊 
    有代码的话 email给我谢谢了,一定加分
    email:[email protected]
      

  5.   

    只能通过: pazee(耙子) 兄说的那样,拦截数据包进行分析
      

  6.   

    这是一个HTTP代理的例子,可以清楚看到用户上网的所有信息,包括登录的密码,用户,太恐怖了unit main;interfaceuses
     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     RXShell, Menus, StdCtrls, ExtCtrls, ScktComp;
    type
    session_record=record
    Used:boolean;
    SS_Handle:integer;
    CSocket:Tclientsocket;
    Lookingup:boolean;
    LookupTime:integer;
    Request:boolean;
    request_str:string;
    client_connected:boolean;
    remote_connected:boolean;
    end;
    type
     TForm1 = class(TForm)
       ServerSocket1: TServerSocket;
       ClientSocket1: TClientSocket;
       Timer1: TTimer;
       Label1: TLabel;
       Edit1: TEdit;
       Memo1: TMemo;
       PopupMenu1: TPopupMenu;
       menuopen: TMenuItem;
       menuclose: TMenuItem;
       N1: TMenuItem;
       N2: TMenuItem;
       RxTrayIcon1: TRxTrayIcon;
       N3: TMenuItem;
       N4: TMenuItem;
       btopen: TButton;
       btclose: TButton;
       Button3: TButton;
       bthide: TButton;
       menuhide: TMenuItem;
       Button1: TButton;
       procedure AppException(sender:TObject;e:Exception);
       procedure menuopenClick(Sender: TObject);
       procedure menucloseClick(Sender: TObject);
       procedure menuexit(Sender: TObject);
       procedure FormCreate(Sender: TObject);
       procedure FormClose(Sender: TObject; var Action: TCloseAction);
       procedure ServerSocket1Listen(Sender: TObject;
         Socket: TCustomWinSocket);
       procedure ServerSocket1ClientConnect(Sender: TObject;
         Socket: TCustomWinSocket);
       procedure ServerSocket1ClientDisconnect(Sender: TObject;
         Socket: TCustomWinSocket);
       procedure ServerSocket1ClientError(Sender: TObject;
         Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
         var ErrorCode: Integer);
       procedure ServerSocket1ClientRead(Sender: TObject;
         Socket: TCustomWinSocket);
       procedure ClientSocket1Connect(Sender: TObject;
         Socket: TCustomWinSocket);
       procedure ClientSocket1Disconnect(Sender: TObject;
         Socket: TCustomWinSocket);
       procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
         ErrorEvent: TErrorEvent; var ErrorCode: Integer);
       procedure ClientSocket1Write(Sender: TObject;
         Socket: TCustomWinSocket);
       procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
       procedure Timer1Timer(Sender: TObject);
       procedure N4Click(Sender: TObject);
       procedure RxTrayIcon1Click(Sender: TObject; Button: TMouseButton;
         Shift: TShiftState; X, Y: Integer);
       procedure ClientSocket1Lookup(Sender: TObject;
         Socket: TCustomWinSocket);
       procedure bthideClick(Sender: TObject);
       procedure menuhideClick(Sender: TObject);
       procedure Timer2Timer(Sender: TObject);
       procedure Button1Click(Sender: TObject);
       procedure ClientSocket1Connecting(Sender: TObject;
         Socket: TCustomWinSocket);
     private
       { Private declarations }
     public
       Server_Enabled:boolean;
       session:array of session_record;
       sessions:integer;
       LookupTimeOut:integer;
       InvalidRequests:integer;
     end;
      

  7.   

    var
     Form1: TForm1;implementation{$R *.DFM}
    procedure TForm1.AppException (sender:TObject;E:Exception);
    begin
    //
    end;
    procedure TForm1.menuopenClick(Sender: TObject);
    begin
    serversocket1.active:=true;
    end;procedure TForm1.menucloseClick(Sender: TObject);
    begin
    serversocket1.Active :=false;
    server_enabled:=false;
    menuopen.Enabled :=true;
    btopen.Enabled :=true;
    menuclose.Enabled :=false;
    btclose.Enabled :=false;
    end;procedure TForm1.menuexit(Sender: TObject);
    begin
    application.Terminate ;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    server_enabled:=false;
    sessions:=0;
    invalidrequests:=0;
    LookupTimeOut:=60000;
    timer1.Enabled :=true;
    menuopen.Enabled :=false;
    btopen.Enabled :=false;
    menuclose.Enabled :=true;
    btclose.Enabled :=true;
    serversocket1.Port :=988;
    serversocket1.Active :=true;
    //application.OnActionExecute   :=appexception;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    timer1.Enabled :=false;
    if server_enabled then serversocket1.Active:=false;
    end;procedure TForm1.ServerSocket1Listen(Sender: TObject;
     Socket: TCustomWinSocket);
    begin
    server_enabled:=true;
    menuopen.Enabled :=false;
    btopen.Enabled :=false;
    menuclose.Enabled :=true;
    btclose.Enabled :=true;
    end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
     Socket: TCustomWinSocket);
    var i,j:integer;
    begin
    j:=-1;
    for i:=1 to sessions do
      if not session[i-1].Used and not session[i-1].CSocket.active then
      begin
         j:=i-1;
         session[j].Used :=true;
         break;
      end
      else
      if not session[i-1].Used and session[i-1].CSocket.active then session[j].CSocket .active:=false ;
      if j=-1 then
      begin
         j:=sessions;
         inc(sessions);
         setlength(session,sessions);
         session[j].Used :=true;
         session[j].CSocket :=Tclientsocket.Create (nil);
         session[j].CSocket.onconnect:=clientsocket1connect;
         session[j].CSocket.ondisconnect:=clientsocket1disconnect;
         session[j].CSocket.onerror:=clientsocket1error;
         session[j].CSocket.onread:=clientsocket1read;
         session[j].CSocket .onwrite:=clientsocket1write;
         session[j].CSocket .onlookup:=clientsocket1lookup;
         session[j].CSocket .onconnecting:=clientsocket1connecting;
         session[j].lookingup:=false;
      end;
      session[j].SS_Handle :=socket.SocketHandle ;
      session[j].Request :=false;
      session[j].client_connected :=true;
      session[j].remote_connected :=false;
      edit1.Text :=inttostr(sessions);
    end;
      

  8.   

    procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
     Socket: TCustomWinSocket);
    var i,j,k:integer;
    begin
    for i:=1 to sessions do
    if (session[i-1].SS_Handle =socket.sockethandle) and session[i-1].Used then
    begin
    session[i-1].client_connected :=false;
    if session[i-1].remote_connected then
    session[i-1].CSocket.active:=false
    else
    session[i-1].Used :=false;
    break;
    end;
    j:=sessions;
    k:=0;
    for i:=1 to j do
    begin
    if session[j-i].Used then break;
    inc(k);
    end;
    if k>0 then
    begin
    sessions:=sessions-k;
    setlength(session,sessions);
    end;
    edit1.Text :=inttostr(sessions);
    end;
    procedure TForm1.ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
    var i:integer;
    begin
    for i:=1 to sessions do
    if (session[i-1].Csocket.socket.sockethandle=socket.SocketHandle) and session[i-1].Used then
    begin
    session[i-1].CSocket.tag:=socket.sockethandle;
    session[i-1].remote_connected :=true;
    session[i-1].Lookingup :=false;
    break;
    end;
    end;procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
     Socket: TCustomWinSocket);
    var
    i,j,k:integer;
    begin
    for i:=1 to sessions do
    if (session[i-1].CSocket.tag=socket.SocketHandle ) and session[i-1].Used then
    begin
    session[i-1].remote_connected :=false;
    if not session[i-1].client_connected then
    session[i-1].Used :=false
    else
    for k:=1 to serversocket1.Socket.ActiveConnections do
    if (serversocket1.Socket.Connections [k-1].SocketHandle =session[i-1].SS_Handle ) and session[i-1].Used then
    begin
    serversocket1.Socket.Connections[k-1].Close ;
    break;
    end;
    break;
    end;
    j:=sessions;
    k:=0;
    for i:=1 to j do
    begin
    if session[j-i].Used then
    break;
    inc(k);
    end;
    if k>0 then
    begin
    sessions:=sessions-k;
    setlength(session,sessions);
    end;
    edit1.text:=inttostr(sessions);
    end;procedure TForm1.ClientSocket1Error(Sender: TObject;
     Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
     var ErrorCode: Integer);
    var
    i,j,k:integer;
    begin
    for i:=1 to sessions do
    if (session[i-1].CSocket.tag=socket.SocketHandle ) and session[i-1].Used then
    begin
    socket.Close ;
    session[i-1].remote_connected :=false;
    if not session[i-1].client_connected then
    session[i-1].Used :=false
    else
    for k:=1 to serversocket1.Socket.ActiveConnections do
    if (serversocket1.Socket.Connections[k-1].SocketHandle =session[i-1].SS_Handle ) and session[i-1].Used then
    begin
    serversocket1.Socket.Connections [k-1].Close;
    break;
    end;
    break;
    end;
    j:=sessions;
    k:=0;
    for i:=1 to j do
    begin
    if session[j-i].Used then
    break;
    inc(k);
    end;
    errorcode:=0;
    if k>0 then
    begin
    sessions:=sessions-k;
    setlength(session,sessions);
    end;
    edit1.Text :=inttostr(sessions);
    end;procedure TForm1.ClientSocket1Write(Sender: TObject;
     Socket: TCustomWinSocket);
    var i:integer;
    begin
    for i:=1 to sessions do
    if (session[i-1].CSocket.tag=socket.SocketHandle ) and session[i-1].Used then
    begin
    if session[i-1].Request then
    begin
    socket.SendText(session[i-1].request_str);
    session[i-1].Request :=false;
    end;
    break;
    end;
    end;
      

  9.   

    procedure TForm1.ClientSocket1Read(Sender: TObject;
     Socket: TCustomWinSocket);
    var
    i,j,rec_bytes:integer;
    rec_buffer:array[0..2047] of char;
    begin
    for i:=1 to sessions do
    if (session[i-1].CSocket.tag=socket.SocketHandle ) and session[i-1].used then
    begin
    rec_bytes:=socket.ReceiveBuf (rec_buffer,2048);
    for j:=1 to serversocket1.Socket.ActiveConnections do
    if serversocket1.Socket.Connections [j-1].SocketHandle =session[i-1].SS_Handle then
    begin
    serversocket1.Socket.Connections [j-1].SendBuf (rec_buffer,rec_bytes);
    break;
    end;
    break;
    end;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
    i,j:integer;
    begin
    for i:=1 to sessions do
      if session[i-1].Used and session[i-1].Lookingup then
      begin
      inc(session[i-1].LookupTime );
      if session[i-1].LookupTime >lookuptimeout then
      begin
      session[i-1].Lookingup :=false;
      session[i-1].CSocket.active:=false;
      for j:=1 to serversocket1.socket.activeconnections do
         if serversocket1.Socket.Connections[j-1].sockethandle=session[i-1].ss_handle then
         begin
            serversocket1.socket.connections[j-1].close;
            break;
         end;
      end;
    end;end;
    procedure TForm1.ServerSocket1ClientError(Sender: TObject;
     Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
     var ErrorCode: Integer);
    var i,j,k:integer;
    begin
    for i:=1 to sessions do
    if (session[i-1].SS_Handle=socket.sockethandle) and session[i-1].Used then
    begin
    session[i-1].client_connected:=false;
    if session[i-1].remote_connected  then
    session[i-1].CSocket.active:=false
    else
    session[i-1].Used:=false;
    break;
    end;
    j:=sessions;
    k:=0;
    for i:=1 to j do
    begin
    if session[j-i].Used then
    break;
    inc(k);
    end;
    if k>0 then
    begin
    sessions:=sessions-k;
    setlength(session,sessions);
    end;
    edit1.text:=inttostr(sessions);
    errorcode:=0;
    end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
     Socket: TCustomWinSocket);
    var
    tmp,line,host:string;
    i,j,port:integer;
    begin
    for i:=1 to sessions do
    if session[i-1].Used and (session[i-1].SS_Handle=socket.sockethandle) then
    begin
    session[i-1].request_str:=socket.receivetext;
    tmp:=session[i-1].request_str;
    memo1.lines.add(tmp);
    j:=pos(char(13)+char(10),tmp);
    while j>0 do begin
    line:=copy(tmp,1,j-1);
    delete(tmp,1,j+1);
    j:=pos('Host',line);
    if j>0 then
    begin
      delete(line,1,j+5);
      j:=pos(':',line);
      if j>0 then
      begin
         host:=copy(line,1,j-1);
         delete(line,1,j-1);
         try
         port:=strtoint(line);
         except
         port:=80
      end;
    end
    else
    begin
      host:=trim(line);
      port:=80;
    end;
    if not session[i-1].remote_connected then
    begin
      session[i-1].request:=true;
      session[i-1].CSocket.host:=host;
      session[i-1].CSocket.port:=port;
      session[i-1].CSocket.active:=true;
      session[i-1].lookingup:=true;
      session[i-1].lookuptime:=0;
    end
    else
    session[i-1].Csocket.socket.sendtext(session[i-1].request_str);
    break;
    end;
    j:=pos(char(13)+char(10),tmp);
    end;
    break;
    end;
    end;
    procedure TForm1.N4Click(Sender: TObject);
    begin
    form1.Show;
    end;procedure TForm1.RxTrayIcon1Click(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
    begin
    form1.Show;
    end;procedure TForm1.ClientSocket1Lookup(Sender: TObject;
     Socket: TCustomWinSocket);
    begin
    //
    end;procedure TForm1.bthideClick(Sender: TObject);
    begin
    form1.Hide ;
    end;procedure TForm1.menuhideClick(Sender: TObject);
    begin
    form1.Hide ;
    end;procedure TForm1.Timer2Timer(Sender: TObject);
    begin
    if form1.WindowState =wsminimized then showmessage('aaaa');
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    form1.WindowState :=wsminimized;
    end;procedure TForm1.ClientSocket1Connecting(Sender: TObject;
     Socket: TCustomWinSocket);
    begin
    //
    end;end.
      

  10.   

    Indy 9.0 里面有个例子 proxy,
    利用了IdMappedPortTCP控件,非常简单,只有几行代码,
    我修改了一下,让他可以显示和修改发送和接受的数据。
      

  11.   

    怎么修改啊 里面几乎没有代码 
    这个一点不懂,希望大哥们多多帮忙啊!我再把问题说一边 希望大家能我点帮助我的问题是:如何判断浏览器索要浏览的地址是否符合我的要求,如果符合就放行,不符就阻断;这样是不是要先截取IP地址进行比较 如:123.123.123.123是可以通过的,在IE浏览器中输入123.123.123.123则可以放行打开123.123.123.123的网页,如果输入别的地址就显示不能连接。需要用程序实现,怎么写啊?小弟不懂,望大哥们帮忙小弟! 十万份的感谢!!!
      

  12.   

    to  huojiehai(海天子) 你的代码我试 没有反应 还说缺少RXShell.dcu这个文件 这是个什么文件啊
      

  13.   

    to: huojiehai(海天子) 
    TRxTrayIcon是个什么控件 我没用到过,我在控件栏里也没找到
      

  14.   

    你可以用BHO ,上google 上去查一查BHO相关的资料就是了.用到一些COM 技术,不过很简单.
      

  15.   

    如果你想获取IE浏览器所发送的IP地址 可以使用IE的DISPATCH接口
    用COM的扩展
    unit IEHelperUnit;interfaceuses
      Windows, ActiveX, Classes, ComObj,SHDOCVW,MSHTML,Dialogs;type
      TIEHelperFactory = class(TComObjectFactory)
      private
        procedure AddKeys;
        procedure RemoveKeys;
      public
        procedure UpdateRegistry(Register:Boolean);override;
      end;
      TIEHelper = class(TComObject, Idispatch, IObjectwithSite)
      public
        function GetTypeInfoCount(out Count:Integer):HResult;stdcall;
        function GetTypeInfo(Index,LocaleID:integer;out TypeInfo):HResult;stdcall;
        function GetIDsOfNames(const IID:TGUID;Names:Pointer;
          NameCount,LocaleID:Integer;DispIDs:Pointer):HResult;stdcall;
        function Invoke(DispID:Integer;const IID:TGUID;LocaleID:Integer;
          Flags:Word;var Params; VarResult,ExcepInfo,ArgErr:Pointer):HResult;stdcall;
        function SetSite(const pUnkSite:IUnknown):HResult;stdcall;
        function GetSite(const riid:TIID;out site:IUnknown):HResult;stdcall;
        {Declare Idispatch methods here}
        {Declare IObjectwithSite methods here}
      private
        IE:IWebbrowser2;
        Cookie:Integer;
      end;const
      Class_IEHelper: TGUID = '{6224A5C9-D87D-4926-8522-FF26D6790518}';implementationuses ComServ,SysUtils,Registry;procedure DoStatusTextChange(const Text:WideString);
    begin
    //
    //ShowMessage('');
    end;procedure DoProgressChange(Progress:Integer;ProgressMax:Integer);
    begin
    //
    //ShowMessage('');
    end;procedure DoCommandStateChange(Command:Integer;Eable:WordBool);
    begin
    //
    //ShowMessage('');
    end;procedure DoDownloadBegin;
    begin
    //
    //ShowMessage('');
    end;procedure DoDownloadComplete;
    begin
    //
    //ShowMessage('');
    end;procedure DoTitleChange(const Text:WideString);
    begin
    //
    //ShowMessage('');
    end;procedure DoPropertyChange(const szProperty:WideString);
    begin
    //
    //ShowMessage('');
    end;procedure DoBeforeNavigate2(const pDisp:IDispatch;var URL:OleVariant;
      var Flags:Olevariant;var TargetFrameName:OleVariant;var PostData:OleVariant;
      var Headers:Olevariant;var Cancel:WordBool);
    begin
      if URL='http://www.sex.com' then
      begin
        ShowMessage('对不起!该站点已被管理员禁止!!');
        Cancel:=True;
        Url:='http://wwwbird/class';
        (pDisp as IWebbrowser2).Navigate2(URL,Flags,TargetFrameName,PostData,Headers);
      end;
    end;procedure DoNewWindow2(var ppDisp:IDispatch;var Cancel:WordBool);
    begin
    //  ShowMessage('');
    end;procedure DoNavigateComplete2(const pDisp:IDispatch;var URL:OleVariant);
    begin
    //
    end;procedure DoDocumentComplete(const pDisp:IDispatch;var URL:OleVariant);
    begin
    //
    end;procedure DoOnQuit;
    begin
    //
    end;procedure DoOnVisible(Visible:WordBool);
    begin
    //
    end;procedure BuildPositionalDispIds(pDispIds:PDispIdList;const dps:TDispParams);
    var
      i:integer;
    begin
      Assert(pDispIds<>nil);
      for i:=0 to dps.cArgs-1 do
        pDispIds^[i]:=dps.cArgs-1-i;
      if(dps.cNamedArgs<=0) then Exit;
      for i:=0 to dps.cNamedArgs-1 do
        pDispIds^[dps.rgdispidNamedArgs^[i]]:=i;
    end;function TIEHelper.GetTypeInfoCount(out Count:Integer):HResult;
    begin
      Result:=E_NOTIMPL;
      Count:=0;
    end;function TIEHelper.GetTypeInfo(Index,LocaleID:integer;out TypeInfo):HResult;
    begin
      Result:=E_NOTIMPL;
      pointer(TypeInfo):=nil;
    end;function TIEHelper.GetIDsOfNames(const IID:TGUID;Names:Pointer;
          NameCount,LocaleID:Integer;DispIDs:Pointer):HResult;
    begin
      Result:=E_NOTIMPL;
    end;function TIEHelper.Invoke(DispID:Integer;const IID:TGUID;LocaleID:Integer;
          Flags:Word;var Params; VarResult,ExcepInfo,ArgErr:Pointer):HResult;
    type
      POleVariant = ^OleVariant;
    var
      dps:TDispParams absolute Params;
      bHasParams:boolean;
      pDispIds:PDispIdList;
      iDispIdsSize:integer;
    begin
      Result:=DISP_E_MEMBERNOTFOUND;
      pDispIds:=nil;
      iDispIdsSize:=0;
      bHasParams:=(dps.cArgs>0);
      if (bHasParams)then
      begin
        iDispIdsSize:=dps.cArgs*SizeOf(TDispId);
        GetMem(pDispIds,iDispIdsSize);
      end;
      try
        If(bHasParams)then BuildPositionalDispIds(pDispIds,dps);
        case DispId of
          102:
            begin
              DoStatusTextChange(dps.rgvarg^[pDispIds^[0]].bstrVal);
              Result:=S_OK;
            end;
          250:
            begin
              DoBeforeNavigate2(IDispatch(dps.rgvarg^[pDispIds^[0]].dispVal),
              POleVariant(dps.rgvarg^[pDispIds^[1]].pvarVal)^,
              POleVariant(dps.rgvarg^[pDispIds^[2]].pvarVal)^,
              POleVariant(dps.rgvarg^[pDispIds^[3]].pvarVal)^,
              POleVariant(dps.rgvarg^[pDispIds^[4]].pvarVal)^,
              POleVariant(dps.rgvarg^[pDispIds^[5]].pvarVal)^,
              dps.rgvarg^[pDispIds^[6]].pbool^);
              Result:=S_OK;
            end;
          end;
      finally
        if(bHasParams)then FreeMem(pDispIds,iDispIdsSize);
      end;end;function TIEHelper.SetSite(const pUnkSite:IUnknown):HResult;
    var
      cmdTarget:IOleCommandTarget;
      Sp:IServiceProvider;
      CPC:IConnectionPointContainer;
      CP:IConnectionPoint;
    begin
      If Assigned(pUnkSite) then
      begin
        cmdTarget:=pUnkSite as IOleCommandTarget;
        Sp:=CmdTarget as IServiceProvider;
          if Assigned(Sp) then
            Sp.QueryService(IWebbrowserApp,IWebbrowser2,IE);
          If Assigned(IE) then
          begin
            IE.QueryInterface(IConnectionPointContainer,CPC);
            CPC.FindConnectionPoint(DWEBbrowserEventS2,CP);
            CP.Advise(Self,Cookie);
          end;
      end;
      Result:=S_OK;
    end;function TIEHelper.GetSite(const riid:TIID;out site:IUnknown):HResult;
    begin  if Assigned(IE) then Result:=IE.QueryInterface(riid,site)
      else
        Result:=E_FAIL;
    end;procedure TIEHelperFactory.AddKeys;
    VAR
      S:string;
    begin
      S:=GUIDToString(CLASS_IEHelper);
      //{6224A5C9-D87D-4926-8522-FF26D6790518}
      With TRegistry.Create do
      begin
        try
          RootKey:=HKEY_LOCAL_MACHINE;
          if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\'+S,true) then CloseKey;
        finally
          free;
        end;
      end;
    end;procedure TIEHelperFactory.RemoveKeys;
    VAR
      S:string;
    begin
      S:=GUIDToString(CLASS_IEHelper);
      With TRegistry.Create do
      begin
        try
          RootKey:=HKEY_LOCAL_MACHINE;
          DeleteKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\'+S);
        finally
          free;
        end;
      end;
    end;procedure TIEHelperFactory.UpdateRegistry(Register:Boolean);
    begin
      inherited UpdateRegistry(Register);
      //Addkeys;
      if Register then Addkeys else RemoveKeys;
    end;initialization
      TComObjectFactory.Create(ComServer, TIEHelper, Class_IEHelper,
        'IEHelper', '', ciMultiInstance, tmApartment);
    end.
      

  16.   

    所有输入IE的网址 将会调用
    procedure DoBeforeNavigate2(const pDisp:IDispatch;var URL:OleVariant;
      var Flags:Olevariant;var TargetFrameName:OleVariant;var PostData:OleVariant;
      var Headers:Olevariant;var Cancel:WordBool);
    begin
      if URL='http://www.sex.com' then
      begin
        ShowMessage('对不起!该站点已被管理员禁止!!');
        Cancel:=True;
        Url:='http://wwwbird/class';
        (pDisp as IWebbrowser2).Navigate2(URL,Flags,TargetFrameName,PostData,Headers);
      end;
    end;
    此过程
      

  17.   

    to  lzbug(lanchong) 这个控件可以非常简单的做到你要求的那些东西,他的帮助和例子我觉得非常清晰了,
    如果你看他的帮助还看不明白,你的学习能力就该检讨了。
      

  18.   

    多谢大家 小弟愚钝搞错了工程 现在huojiehai(海天子)和 hatedeadlock(雪男孩) 的代码都能用了 谢谢大家帮忙!