2014-09-11 3 views
1

Я использую событие Process_Exited в своей службе, он получает все события, кроме события, выходящего из Internet Explorer, он получает событие, когда все окна проводника закрываются, но когда я закрываю исследователей один за другим, моя функция получает только событие, когда последний исследователь закрывается, поэтому функция только в состоянии получить один идентификатор процесса вместо всех IEXPLORER идентификаторов процессовСобытие, отправленное Internet 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 

Примечание: Im использование Iexplorer8 и там является проблемой в его процессах. Процессы не выходят, даже если вы закрываете окно iexplorer

+0

Ну, технически процесс IE все еще работает, когда вы открытие/закрытие окна и до сих пор, по крайней мере, 1 открыто. Я думаю, вы действительно хотите больше узнать, когда окна закрываются, а не событие, выходящее из процесса. – Kat

+0

Что я хочу, так это получить выходное событие, когда пользователь закрывает окно IE. – Suleman

+0

Вы пробовали событие windows.close()? http://msdn.microsoft.com/en-us/library/system.windows.window.closing(v=vs.110).aspx – Kat

ответ

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 
Смежные вопросы