2014-09-11 108 views
1

我在我的服務中使用Process_Exited事件它獲取所有事件,除了Internet Explorer退出事件,它獲取所有資源管理器窗口關閉時的事件,但當我逐一關閉瀏覽器時,我的功能只得到當最終的探險家被關閉的情況下,這樣的功能是隻能得到一個進程ID,而不是所有IEXPLORER進程IDInternet Explorer退出事件VB.net

這是我的方法

Private Sub Process_Exited(ByVal sender As Object, ByVal e As System.EventArgs) 


    Dim lObj_CurrPro As Process 
    Try 
     ' 
     ' Make sure that the sender object is of process type to avoid unforseen errors 
     ' 
     If TypeOf sender Is Process Then 
     lObj_CurrPro = sender 

     Call StopTracking(lObj_CurrPro.Id) 
     End If 

    Catch 

    End Try 
    End Sub 

注:使用Iexplorer8有林是其過程中的一個問題。即使關閉iexplorer窗口,進程也不會退出

+0

好時間得到一個事件,在技術上當您打開/關閉窗戶,仍然有至少1打開IE進程仍在運行。我想你真的想看看更多的時間窗口關閉事件然後,而不是進程退出事件。 – Kat 2014-09-11 14:08:51

+0

我想要的是在用戶關閉IE窗口時獲取退出的事件。 – Suleman 2014-09-12 04:50:46

+0

你嘗試過windows.close()事件嗎? http://msdn.microsoft.com/en-us/library/system.windows.window.closing(v=vs.110).aspx – Kat 2014-09-12 14:09:14

回答

0

這就是我所做的。這段代碼獲得事件每當IE啓動時間和每一個IE瀏覽器關閉

Imports SHDocVw 
Imports System.Windows 
Imports System.IO 
Imports System.Management 
Imports System.Object 
Imports System.EventArgs 
Imports System.Management.ManagementEventArgs 
Imports System.Management.EventArrivedEventArgs 
Imports System.Threading 



Public Class Form1 
    Public cd As New List(Of collectData)() 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    End Sub 

    Dim URL As String 
    Public ie As New List(Of SHDocVw.InternetExplorer)() 
    Public ie_temp As New List(Of String)() 
    Public count As New Integer 

    Private Sub Command1_Click() 

    Dim shellWins As SHDocVw.ShellWindows 
    Dim explorer As SHDocVw.InternetExplorer 
    Dim lObj_ShellWindows As ShellWindows 
    lObj_ShellWindows = New SHDocVw.ShellWindows 
    Dim lObj_ie As InternetExplorer 
    Dim li_Itr As New Integer 
    Dim set_CD As collectData 
    Dim FILE_NAME As String = "D:\test2.txt" 
    ' Dim objWriter As New System.IO.StreamWriter(FILE_NAME, True) 
    shellWins = New SHDocVw.ShellWindows 

    'If ie IsNot Nothing Then 
    Try 

     ie.Insert(count, shellWins.Item(shellWins.Count - 1)) 
     set_CD = New collectData(DateTime.Now, #12:00:00 AM#, ie(count).LocationName, ie(count).LocationURL, 
        count, False) 
     cd.Insert(count, set_CD) 


     ' objWriter.WriteLine(ie(count).LocationName + " Opened " + DateTime.Now) 
     ' objWriter.Close() 
     count = count + 1 


     lObj_ie = lObj_ShellWindows(lObj_ShellWindows.Count - 1) 

     If lObj_ie.Name = "Windows Internet Explorer" Then 
     AddHandler lObj_ie.OnQuit, AddressOf HandleIEQuit 
     End If 

    Catch ex As Exception 

    End Try 
    'Else 

    'End If 

    shellWins = Nothing 
    explorer = Nothing 
    End Sub 
    Public Sub get_ie() 
    Dim lObj_ShellWindows As ShellWindows 
    lObj_ShellWindows = New SHDocVw.ShellWindows 
    Dim lObj_exp As InternetExplorer 
    Dim li_count As Integer 
    ' Dim set_CD As collectData 
    ie = Nothing 
    ie = New List(Of InternetExplorer) 
    li_count = 0 
    For Each lObj_exp In lObj_ShellWindows 
     Try 
     If lObj_exp.Name = "Windows Internet Explorer" And lObj_exp.LocationURL.Contains("/") Then 
      ie.Insert(li_count, lObj_exp) 
      li_count = li_count + 1 
     Else 
     End If 

     Catch ex As Exception 

     End Try 
    Next 
    Dim tempName As String 
    Dim IE_exists As New Boolean 
    IE_exists = False 
    If ie.Count = 0 Then 
     For del As Integer = 0 To count 
     cd(del).exit_time = DateTime.Now 
     cd(del).exited = True 
     Next 
    Else 
     For i As Integer = 0 To li_count - 1 
     tempName = ie(i).LocationURL 
     For j As Integer = 0 To count - 1 
      If cd(j).url = tempName Then 
      IE_exists = True 
      ElseIf j = count - 1 And cd(j).url IsNot tempName Then 
      cd(j).exit_time = DateTime.Now 
      cd(j).exited = True 
      End If 

     Next 
     IE_exists = False 
     Next 
    End If 


    count = li_count 
    End Sub 
    Public Sub HandleIEQuit() 
    Dim lObj_ShellWindows As ShellWindows 

    lObj_ShellWindows = New SHDocVw.ShellWindows 
    Dim do_thread As New Threading.Thread(
            AddressOf get_ie) 
    do_thread.Start() 


    End Sub 
    Private Sub ManagementWatcher_StartEventArrived(ByVal PObj_Sender As Object, ByVal PObj_EventArgs As EventArrivedEventArgs) 

    Dim ls_ProcessName As String 

    Dim li_ProcessID As Integer 


    Try 

     ls_ProcessName = Path.GetFileNameWithoutExtension(PObj_EventArgs.NewEvent("ProcessName").ToString().ToUpper()) 
     li_ProcessID = Integer.Parse(PObj_EventArgs.NewEvent("ProcessID").ToString()) 


     If ls_ProcessName = "IEXPLORE" Then 

     Command1_Click() 
     End If 


    Catch lObj_Ex As Exception 

    End Try 

    End Sub 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 


    Dim mObj_ManagementStartWatcher As ManagementEventWatcher = New ManagementEventWatcher("Select * From Win32_ProcessStartTrace") 
    Call mObj_ManagementStartWatcher.Start() 
    AddHandler mObj_ManagementStartWatcher.EventArrived, AddressOf ManagementWatcher_StartEventArrived 


    End Sub 
End Class