程序组成: 
两个引用对象:Microsoft HTML Object Library,Microsoft Internet Object 
两个窗体: frmAbout.frm frmMenu.frm 
两个*.bas: APIs.bas,mSysTray.bas 
两个Class: MyIE.cls, windows.cls(其中windows.cls是collection对象的扩展,放MyIE.cls) 
下面公开这两个主要类的代码(如要全部代码请留email,要看演示上www.jjsoft.cn,版权归作者,要用于商业目的请和作者联系[email protected]) 
myIE.cls 
------------------------------------------------------------------------------------------------------ 
Option Explicit 
 Private WithEvents mIE As SHDocVw.InternetExplorer Private WithEvents IE_IFrame As MSHTML.HTMLIFrame Private WithEvents win2 As MSHTML.HTMLWindow2 Private WithEvents doc2 As MSHTML.HTMLDocument 
'/////////////////////////////////////////////////////// '判断Frame对象 Private tmpIE_IFrame As MSHTML.HTMLIFrame Private IE_FCols As MSHTML.FramesCollection '/////////////////////////////////////////////////////// 
Private body As MSHTML.HTMLBody Private IElements As MSHTML.IHTMLElement Private mHWnd As Long Private mDoc As MSHTML.IHTMLDocument2 Private isLoaded As Integer Private isClicked As Integer Private isCleaned As Integer Private tmpState As String 
Private Const FlashClassID As String = "CLSID:D27CDB6E-AE6D-11CF-96B8-444553540000" 
'determine the refresh button is clicked 'Private m_nPageCounter As Integer 'Private m_nObjCounter As Integer Private m_bIsRefresh As Boolean Private mSArrays As Variant Private mPtr As POINTAPI '////////////////////////////////////////// 
Public Function Banding(item As SHDocVw.InternetExplorer) As SHDocVw.InternetExplorer     On Error GoTo Err     Dim tmpName As String, tmpie As SHDocVw.InternetExplorer     'Dim tmpdoc As MSHTML.HTMLDocument     Set tmpie = item     If (tmpie Is Nothing) Then Exit Function     If Not (TypeOf item Is IWebBrowser2) Then Exit Function                  tmpName = tmpie.FullName     tmpName = Mid(tmpName, InStrRev(tmpName, "\") + 1)     If UCase(tmpName) = "IEXPLORE.EXE" Then         Set mIE = tmpie         mHWnd = mIE.hwnd        ' Call BandingDoc(mIE2)     End If     tmpName = ""     Set tmpie = Nothing     Set Banding = mIE 
Bye:          If Not (tmpie Is Nothing) Then Set tmpie = Nothing     Exit Function Err:     MsgBox "Error:" & Err.Description & " in Banding"     Resume Bye End Function 
Public Property Get IEHandle() As Long     IEHandle = mHWnd End Property 
Private Sub Class_Initialize() 
    m_bIsRefresh = True          '////////////////////////     '非弹出式广告特征集     mSArrays = Array("input", "a", "iframe", "area", "frame")     '//////////////////////// 
End Sub 
Private Sub Class_Terminate()     Set mDoc = Nothing     Set mIE = Nothing End Sub 
Private Sub mIE_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)     On Error Resume Next     Dim tmpie As SHDocVw.InternetExplorer     If Not (mDoc Is Nothing) Then         Set mDoc = Nothing     Else         Exit Sub     End If     Call BandingDoc("mIE_BeforeNavigate2")     'm_nPageCounter = m_nPageCounter + 1 End Sub 
Private Sub mIE_DocumentComplete(ByVal pDisp As Object, URL As Variant)     On Error Resume Next     'm_nPageCounter = m_nPageCounter - 1     Call BandingDoc("mIE_DocumentComplete")     If m_bIsRefresh Then         If (tmpState = "interactive") Then _             isLoaded = 1             Call BandingDoc2(mIE)     Else         If (tmpState = "complete") Then _             isLoaded = 1             Call BandingDoc2(mIE)     End If End Sub 
Private Sub mIE_DownloadBegin()     On Error Resume Next     If Not (mDoc Is Nothing) Then Set mDoc = Nothing     Call BandingDoc("mIE_DownloadBegin")          'Remarked by zdj 2004-02-02     'If m_bIsRefresh = False Then m_bIsRefresh = True     'm_nObjCounter = m_nObjCounter + 1 End Sub 
Private Sub mIE_DownloadComplete()     'm_nObjCounter = m_nObjCounter - 1     'Call BandingDoc("mIE_DownloadComplete")     'If (tmpState = "complete") Then     '    isLoading = 0     '    Call BandingDoc2(mIE)     'End If     '////////////////////////////////////////////     'The refresh button is clicked     'If Not (m_bIsRefresh) Then m_bIsRefresh = True     'If m_nObjCounter = 1 Then m_nObjCounter = 0          'Remarked by zdj 2004-02-02     'If (m_bIsRefresh) Then     '    isLoaded = 1     '    Call BandingDoc2(mIE)     'End If     '          '//////////////////////////////////////////// End Sub 
Private Sub BandingDoc(ByVal strWhere As String)     On Error GoTo Err:     If mIE Is Nothing Then         Exit Sub     End If          If mDoc Is Nothing Then Set mDoc = mIE.document     tmpState = mDoc.readyState     If tmpState <> "complete" Then isLoaded = 0     'Debug.Print mDoc.readyState & " " & strWhere Bye:     Exit Sub Err:     If Err.Number = -2147467259 Then Resume Bye     MsgBox Err.Number & Err.Description & strWhere     Resume Bye End Sub 
Private Sub mIE_NavigateComplete2(ByVal pDisp As Object, URL As Variant)         'm_nPageCounter = m_nPageCounter + 1         'm_nObjCounter = m_nObjCounter + 1                  'Remarked by zdj 2004-02-02         'm_bIsRefresh = False End Sub 
Private Sub mIE_NewWindow2(ppDisp As Object, Cancel As Boolean)     Dim tmpobj As IHTMLDocument2, tmpString As String     Dim notPopups As Boolean, tmpobj2 As IHTMLElement     Dim i As Integer     If (BlockedPopups = True) Then         GetCursorPos mPtr         Set tmpobj = mIE.document         Set tmpobj2 = tmpobj.elementFromPoint(mPtr.X, mPtr.Y)         If tmpobj2 Is Nothing Then             notPopups = Not (isLoaded = 0)         Else             If (tmpobj2.document.activeElement) Is Nothing Then                 notPopups = Not (isLoaded = 0)             Else                 tmpString = LCase(tmpobj2.document.activeElement.tagName)                 For i = LBound(mSArrays) To UBound(mSArrays)                     If tmpString = CStr(mSArrays(i)) Then                         notPopups = True                         Exit For                     End If                 Next i             End If         End If         If notPopups = False Then             Cancel = True             If EnabledBeep Then Beep 500, 100             isCleaned = isCleaned + 1         End If     End If     Set tmpobj2 = Nothing     Set tmpobj = Nothing End Sub 
Private Sub BandingDoc2(ByVal pDisp As Object)     On Error Resume Next     Dim tmpdoc As Object, iwin As MSHTML.HTMLWindow2     Dim tmpdoc2 As MSHTML.HTMLDocument     Dim i As Integer, j As Integer     Dim ii As Integer, jj As Integer     Dim k As Integer, killed As Boolean          If TypeOf pDisp Is IWebBrowser2 Then         Call pDisp.ExecWB(OLECMDID_SHOWMESSAGE, OLECMDEXECOPT_DONTPROMPTUSER)         Set tmpdoc = pDisp.document                  If TypeName(tmpdoc) = "HTMLDocument" Then                        Set doc2 = tmpdoc             Set win2 = doc2.parentWindow             Set body = doc2.body                          'Skip the error message             'win2.clearTimeout (0)                          '绑定flash对象             If (BlockedFlash = True) Then                 i = cleanFlash(doc2.All.tags("OBJECT"), doc2.All.tags("EMBED"))             End If                          '绑定动画对象             If (BlockedAnimate = True) Then                 j = cleanAnimated(doc2.All.tags("IMG"))             End If             '/////////////////////////////////                          If (BlockedFlying = True) Then                 k = cleanFlyingAds(doc2.All.tags("DIV"))             End If                          '////////////////////////////////////////////////             '过滤框架中的广告                 If TypeName(doc2.body) = "HTMLFrameSetSite" Then                   If doc2.readyState = "complete" Then                     win2.Status = "正在阻止框架中的广告..."                     ii = RecursivlyFlash(doc2.frames)                     jj = RecursivlyAnimate(doc2.frames)                     'win2.Status = "阻止完毕!"                   End If                 End If             '////////////////////////////////////////////////                          '//////////////////////////////////             ' skip the onload event in body tag             'body.onload = ""             body.onunload = ""             '//////////////////////////////////             killed = (isCleaned > 0 Or i > 0 Or j > 0 Or ii > 0 Or jj > 0 Or k > 0)             If (killed) Then                 Call showAlertInfo(isCleaned + i + j + ii + jj + k)             End If         End If     End If 
    isCleaned = 0     Set tmpdoc = Nothing 
End Sub 
Private Function cleanFlash(ByVal item As MSHTML.IHTMLElementCollection, ByVal item2 As MSHTML.IHTMLElementCollection) As Integer          On Error GoTo Errs     Dim i As Integer     Dim objelments As MSHTML.HTMLObjectElement, objstyle As MSHTML.IHTMLStyle     Dim objembed As MSHTML.HTMLEmbed          '网页中无此标签的对象     If (item Is Nothing) Then Exit Function               i = 0          '/////////////////////////////////////////////////////////     For Each objelments In item         'DoEvents                  If Not (objelments Is Nothing) Then                          If (item.Length = 0) Then Exit For             If UCase(objelments.classid) = FlashClassID Then                                  Set objstyle = objelments.Style                 With objstyle                                          .visibility = "Hidden"                     '.Width = 0                     '.Height = 0                                      End With                 Set objstyle = Nothing                 i = i + 1             End If                    End If     Next objelments     '//////////////////////////////////////////////////////////          '网页中无此标签的对象     If (item2 Is Nothing) Then Exit Function               For Each objembed In item2         'DoEvents         If Not (objembed Is Nothing) Then                          If (item2.Length = 0) Then Exit For             If InStr(1, LCase(objembed.src), ".swf") > 0 Then                                  Set objstyle = objembed.Style                 With objstyle                                          .visibility = "Hidden"                     '.Width = 0                     '.Height = 0                                      End With                 Set objstyle = Nothing                          End If         End If     Next objembed     cleanFlash = i Bye:     Exit Function Errs:     cleanFlash = -1     Resume Bye 
End Function 
Private Function cleanAnimated(ByVal item As MSHTML.IHTMLElementCollection) As Integer          On Error GoTo Errs     Dim i As Integer     Dim objImgs As MSHTML.IHTMLImgElement, objImg As MSHTML.HTMLImg     Dim objstyle As MSHTML.IHTMLStyle          '网页中无此标签的对象     If (item Is Nothing) Then Exit Function     i = 0          For Each objImgs In item                  If Not (objImgs Is Nothing) Then                          If (item.Length = 0) Then Exit For                          Set objImg = objImgs                          Set objstyle = objImg.Style             If InStr(1, LCase(objImg.src), ".gif") > 0 Then                                  DoEvents                 With objstyle                                          .visibility = "hidden"                     '.Width = 0                     '.Height = 0                                      End With                 i = i + 1                          End If         End If                  Set objstyle = Nothing         Set objImg = Nothing             Next objImgs     cleanAnimated = i Bye:     Exit Function Errs:     cleanAnimated = -1     Resume Bye 
End Function Private Function RecursivlyFlash(ByRef frame As FramesCollection) As Integer         On Error GoTo Errs         Dim X As Object, ihtmle As IHTMLElementCollection         Dim i As Integer, spWin As IHTMLWindow2                  Set X = frame.document.frames                  If X.Length = 0 Then Exit Function                  For i = 0 To X.Length - 1              'DoEvents              Call RecursivlyFlash(X(i))              Set ihtmle = X(i).document.All                            If BlockedFlash Then                                  RecursivlyFlash = cleanFlash(ihtmle.tags("OBJECT"), ihtmle.tags("EMBED")) 
                              End If                            Set ihtmle = Nothing 
        Next i Bye:     Exit Function Errs:     RecursivlyFlash = -1     Resume Bye 
End Function Private Function RecursivlyAnimate(ByRef frame As FramesCollection) As Integer                  On Error GoTo Errs         Dim X As Object, ihtmle As IHTMLElementCollection         Dim i As Integer, spWin As IHTMLWindow2                  Set X = frame.document.frames                  If X.Length = 0 Then Exit Function                  For i = 0 To X.Length - 1              'DoEvents              Call RecursivlyAnimate(X(i))              Set ihtmle = X(i).document.All                            If BlockedAnimate Then                                  RecursivlyAnimate = cleanAnimated(ihtmle.tags("IMG")) 
                              End If                            Set ihtmle = Nothing 
        Next i Bye:     Exit Function Errs:     RecursivlyAnimate = -1     Resume Bye 
End Function 
Private Function cleanFlyingAds(ByVal item As MSHTML.IHTMLElementCollection) As Integer     On Error GoTo Errs     Dim i As Integer, l As Integer, j As Integer     Dim tmpobj As Object          l = item.Length     For i = 0 To l - 1         DoEvents         Set tmpobj = item(i)         If (tmpobj.Style.position = "absolute") Then             tmpobj.Style.visibility = "hidden"             j = j + 1         End If         Set tmpobj = Nothing     Next i     cleanFlyingAds = j Bye:     Exit Function Errs:    cleanFlyingAds = -1    Resume Bye End Function 
'///////////////////////////////////////////////////////////// '显示警告语 Private Sub showAlertInfo(ByVal Count As Integer)     With win2         .Status = "已阻止网页中符合条件的" & Count & "个广告!(www.jjsoft.cn)"     End With      End Sub '//////////////////////////////////////////////////////////// 
Private Sub AlertBeep()     Beep 500, 500 End Sub 
Private Sub win2_onunload()     On Error Resume Next          ' the refresh button is clicked     If mDoc.readyState = "complete" Then m_bIsRefresh = True     isLoaded = 1 End Sub 
------------------------------------------------------------------------------------------------------ 
Windows.cls 
'局部变量,保存集合 Private mCol As Collection Private WithEvents winShell As SHDocVw.ShellWindows 
Private Function Add(Key As SHDocVw.InternetExplorer) As MyIE     '创建新对象     Dim objNewMember As MyIE     Set objNewMember = New MyIE 
     '设置传入方法的属性     If Not objNewMember.Banding(Key) Is Nothing Then         mCol.Add objNewMember, CStr(objNewMember.IEHandle)     End If 
    '返回已创建的对象     Set Add = objNewMember     Set objNewMember = Nothing 
 End Function 
Public Property Get item(vntIndexKey As Variant) As MyIE     '引用集合中的一个元素时使用。     'vntIndexKey 包含集合的索引或关键字,     '这是为什么要声明为 Variant 的原因     '语法:Set foo = x.Item(xyz) or Set foo = x.Item(5)   Set item = mCol(vntIndexKey) End Property 
  
Public Property Get Count() As Long     '检索集合中的元素数时使用。语法:Debug.Print x.Count     Count = mCol.Count End Property 
 Public Sub Remove(vntIndexKey As Variant)     '删除集合中的元素时使用。     'vntIndexKey 包含索引或关键字,这是为什么要声明为 Variant 的原因     '语法:x.Remove(xyz) 
     mCol.Remove vntIndexKey End Sub 
 Public Property Get NewEnum() As IUnknown     '本属性允许用 For...Each 语法枚举该集合。     Set NewEnum = mCol.[_NewEnum] End Property 
 Private Sub Class_Initialize()     '创建类后创建集合          Call Refresh End Sub 
 Private Sub Class_Terminate()     '类终止后破坏集合     Set mCol = Nothing     Set winShell = Nothing End Sub 
Private Sub Refresh()          On Error GoTo Proc_Err     Dim SWs As New SHDocVw.ShellWindows     Dim var As SHDocVw.InternetExplorer          Set mCol = Nothing     Set mCol = New Collection     For Each var In SWs        Add var     Next               If ObjPtr(winShell) <> ObjPtr(SWs) Then         Set winShell = SWs     End If     Set SWs = Nothing     Set var = Nothing     Exit Sub 
Proc_Err:      End Sub 
Private Sub winShell_WindowRegistered(ByVal lCookie As Long)     Call Refresh End Sub 
Private Sub winShell_WindowRevoked(ByVal lCookie As Long)     Call Refresh End Sub ----------------------------------------------------------------------------------------------------- 
  
   
 
  |