如题
禁止弹出广告窗口,并且打开新网页不出现新窗口谢谢!

解决方案 »

  1.   

    需要编写IE插件http://lysoft.7u7.net
      

  2.   

    http://hubdog.csdn.net/Hubdog/Catelog.htm第四篇  IE扩展部分...4.3 阻断弹出式广告的BHO
      

  3.   

    delphi如何实现阻断网页广告弹出(转载) 
    关键字: 阻断广告弹出 
    分类: 局域网及互联网 
    密级: 公开 
    (评分: , 回复: 0, 阅读: 119)>>>> 
    <>II
    //////////////////////////////////CIEBHO.pas///////////////////////////////////
    {-----------------------------------------------------------------------------
     Unit Name: CIEBHO
     Author:    hubdog(陈省)
     Email:     [email protected]
     Purpose:   演示如何实现一个可以阻断广告弹出的BHO
     History:
                2003-4-23 创建本单元
    -----------------------------------------------------------------------------}unit CIEBHO;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
      Windows, ActiveX, Classes, ComObj, Shdocvw, udbg;type
      TTIEAdvBHO = class(TComObject, IObjectWithSite, IDispatch)
      private
        FIESite: IUnknown;
        FIE: IWebBrowser2;
        FCPC: IConnectionPointContainer;
        FCP: IConnectionPoint;
        FCookie: Integer;
      protected
        //IObjectWithSite接口方法定义
        function SetSite(const pUnkSite: IUnknown): HResult; stdcall;
        function GetSite(const riid: TIID; out site: IUnknown): HResult; stdcall;
        //IDispatch接口方法定义
        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;
        //事件处理过程
        procedure DoNewWindow2(var ppDisp: IDispatch; var Cancel: WordBool);
        procedure DoBeforeNavigate2(const pDisp: IDispatch; var URL: OleVariant; var Flags: OleVariant;
                                  var TargetFrameName: OleVariant; var PostData: OleVariant;
                                  var Headers: OleVariant; var Cancel: WordBool);
      end;const
      Class_TIEAdvBHO: TGUID = '{D032570A-5F63-4812-A094-87D007C23012}';implementationuses ComServ, Sysutils, ComConst;{ TTIEAdvBHO }procedure TTIEAdvBHO.DoBeforeNavigate2(const pDisp: IDispatch; var URL,
      Flags, TargetFrameName, PostData, Headers: OleVariant;
      var Cancel: WordBool);
    begin
      if FIE.ToolBar=0 then FIE.Quit;
    end;procedure TTIEAdvBHO.DoNewWindow2(var ppDisp: IDispatch;
      var Cancel: WordBool);
    begin
      //判断页面是否显示完全
    //  Debugger.LogMsg('NewWindow2');
    //  if FIE.ReadyState<>REFRESH_COMPLETELY then
    //  begin
    //    //不完全,禁止
    //    Cancel:=False;
    //    ppDisp:=FIE.Application;
    //  end;
    end;
      

  4.   


    function TTIEAdvBHO.GetIDsOfNames(const IID: TGUID; Names: Pointer;
      NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
    begin
      Result := E_NOTIMPL;
    end;function TTIEAdvBHO.GetSite(const riid: TIID;
      out site: IInterface): HResult;
    begin
      if Supports(FIESite, riid, site) then
        Result := S_OK
      else
        Result := E_NOINTERFACE;
    end;function TTIEAdvBHO.GetTypeInfo(Index, LocaleID: Integer;
      out TypeInfo): HResult;
    begin
      Result := E_NOTIMPL;
      pointer(TypeInfo) := nil;
    end;function TTIEAdvBHO.GetTypeInfoCount(out Count: Integer): HResult;
    begin
      Result := E_NOTIMPL;
      Count := 0;
    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 TTIEAdvBHO.Invoke(DispID: Integer; const IID: TGUID;
      LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
      ArgErr: Pointer): HResult;
    var
      dps: TDispParams absolute Params;
      bHasParams: boolean;
      pDispIds: PDispIdList;
      iDispIdsSize: integer;
    begin
      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);
        Result := S_OK;
        case DispId of
    //      251://NEWWINDOW2事件ID
    //        begin
    //          DoNewWindow2(IDispatch(dps.rgvarg^[pDispIds^[0]].pdispval^),
    //              dps.rgvarg^[pDispIds^[1]].pbool^);
    //        end;
          250://BeforeNaviage2事件id
            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^);
            end;
          253://OnQuit事件ID
            begin
              FCP.Unadvise(FCookie);
            end;
        else
          Result := DISP_E_MEMBERNOTFOUND;
        end;
      finally
        if (bHasParams) then
          FreeMem(pDispIds, iDispIdsSize);
      end;
    end;function TTIEAdvBHO.SetSite(const pUnkSite: IInterface): HResult;
    begin
      Result := E_FAIL;
      //保存接口
      FIESite := pUnkSite;
      if not Supports(FIESite, IWebBrowser2, FIE) then
        Exit;
      if not Supports(FIE, IConnectionPointContainer, FCPC) then
        Exit;
      //挂接事件
      FCPC.FindConnectionPoint(DWebBrowserEvents2, FCP);
      FCP.Advise(Self, FCookie);
      Result := S_OK;
    end;
      

  5.   

    procedure DeleteRegKeyValue(Root: DWORD; Key: string; ValueName: string = '');
    var
      KeyHandle: HKEY;
    begin
      if ValueName = '' then
        RegDeleteKey(Root, PChar(Key));
      if RegOpenKey(Root, PChar(Key), KeyHandle) = ERROR_SUCCESS then
      try
        RegDeleteValue(KeyHandle, PChar(ValueName));
      finally
        RegCloseKey(KeyHandle);
      end;
    end;procedure CreateRegKeyValue(Root: DWORD; const Key, ValueName, Value: string);
    var
      Handle: HKey;
      Status, Disposition: Integer;
    begin
      Status := RegCreateKeyEx(ROOT, PChar(Key), 0, '',
        REG_OPTION_NON_VOLATILE, KEY_READ or KEY_WRITE, nil, Handle,
        @Disposition);
      if Status = 0 then
      begin
        Status := RegSetValueEx(Handle, PChar(ValueName), 0, REG_SZ,
          PChar(Value), Length(Value) + 1);
        RegCloseKey(Handle);
      end;
      if Status <> 0 then
        raise EOleRegistrationError.CreateRes(@SCreateRegKeyError);
    end;type
      TIEAdvBHOFactory = class(TComObjectFactory)
      public
        procedure UpdateRegistry(Register: Boolean); override;
      end;{ TIEAdvBHOFactory }procedure TIEAdvBHOFactory.UpdateRegistry(Register: Boolean);
    begin
      inherited;
      if Register then
        CreateRegKeyValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\explorer\Browser Helper Objects\' + GuidToString(ClassID), '', '')
      else
        DeleteRegKeyValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\explorer\Browser Helper Objects\' + GuidToString(ClassID), '');
    end;initialization
      TIEAdvBHOFactory.Create(ComServer, TTIEAdvBHO, Class_TIEAdvBHO,
        'TIEAdvBHO', '', ciMultiInstance, tmApartment);
    end.//////////////////////////////IEBHO_TLB.pas//////////////////////////////////
    unit IEBHO_TLB;// ************************************************************************ //
    // WARNING                                                                    
    // -------                                                                    
    // The types declared in this file were generated from data read from a       
    // Type Library. If this type library is explicitly or indirectly (via        
    // another type library referring to this type library) re-imported, or the   
    // 'Refresh' command of the Type Library Editor activated while editing the   
    // Type Library, the contents of this file will be regenerated and all        
    // manual modifications will be lost.                                         
    // ************************************************************************ //// PASTLWTR : 1.2
    // File generated on 2003-4-23 13:01:52 from Type Library described below.// ************************************************************************  //
    // Type Lib: C:\Documents and Settings\hubdog.UNIT-LYSOB8L0QB\My Documents\Develop\Delphi\Delphi深度探索二\IE\IEBHO.tlb (1)
    // LIBID: {AC166DD1-E716-4ACC-8DAC-CA805486AB5F}
    // LCID: 0
    // Helpfile: 
    // HelpString: IEBHO Library
    // DepndLst: 
    //   (1) v2.0 stdole, (C:\WINDOWS\System32\stdole2.tlb)
    // ************************************************************************ //
    {$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. 
    {$WARN SYMBOL_PLATFORM OFF}
    {$WRITEABLECONST ON}
    {$VARPROPSETTER ON}
    interfaceuses Windows, ActiveX, Classes, Graphics, StdVCL, Variants;
      // *********************************************************************//
    // GUIDS declared in the TypeLibrary. Following prefixes are used:        
    //   Type Libraries     : LIBID_xxxx                                      
    //   CoClasses          : CLASS_xxxx                                      
    //   DISPInterfaces     : DIID_xxxx                                       
    //   Non-DISP interfaces: IID_xxxx                                        
    // *********************************************************************//
    const
      // TypeLibrary Major and minor versions
      IEBHOMajorVersion = 1;
      IEBHOMinorVersion = 0;  LIBID_IEBHO: TGUID = '{AC166DD1-E716-4ACC-8DAC-CA805486AB5F}';
    implementationuses ComObj;end.//////////////////////////////////IEBHO.dpr///////////////////////////////////
    library IEBHO;uses
      ComServ,
      CIEBHO in 'CIEBHO.pas',
      IEBHO_TLB in 'IEBHO_TLB.pas';exports
      DllGetClassObject,
      DllCanUnloadNow,
      DllRegisterServer,
      DllUnregisterServer;{$R *.TLB}{$R *.RES}begin
    end.