2014-09-11 63 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