Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System
- Imports System.Threading
- Public Class Procesos
- Private oProceso As Proceso
- #Region "API Windows"
- Private Delegate Function EnumWindowsDelegate(ByVal hWnd As System.IntPtr, ByVal parametro As Integer) As Boolean
- Private Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Integer) As Integer
- Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
- ' Para EnumWindows
- Private colWin As New System.Collections.Specialized.StringDictionary
- <System.Runtime.InteropServices.DllImport("user32.dll")> _
- Private Shared Function ShowWindow( _
- hWnd As IntPtr, _
- nCmdShow As Integer) As Boolean
- End Function
- <System.Runtime.InteropServices.DllImport("user32.dll")> _
- Private Shared Function EnumWindows( _
- ByVal lpfn As EnumWindowsDelegate, _
- ByVal lParam As Integer) As Boolean
- End Function
- '
- <System.Runtime.InteropServices.DllImport("user32.dll")> _
- Private Shared Function EnumChildWindows _
- (ByVal hWndParent As System.IntPtr, _
- ByVal lpEnumFunc As EnumWindowsDelegate, _
- ByVal lParam As Integer) As Integer
- End Function
- <System.Runtime.InteropServices.DllImport("user32.dll")> _
- Private Shared Function GetWindowText( _
- ByVal hWnd As System.IntPtr, _
- ByVal lpString As System.Text.StringBuilder, _
- ByVal cch As Integer) As Integer
- End Function
- Private Function EnumWindowsProc(ByVal hWnd As System.IntPtr, ByVal parametro As Integer) As Boolean
- ' Esta función "callback" se usará con EnumWindows y EnumChildWindows
- Dim titulo As New System.Text.StringBuilder(New String(" "c, 256))
- Dim ret As Integer
- Dim nombreVentana As String
- '
- ret = GetWindowText(hWnd, titulo, titulo.Length)
- If ret = 0 Then Return True
- '
- nombreVentana = titulo.ToString.Substring(0, ret)
- If nombreVentana <> Nothing AndAlso nombreVentana.Length > 0 Then
- colWin.Add(hWnd.ToString, nombreVentana)
- End If
- '
- Return True
- End Function
- #End Region
- Public L_Procesos As List(Of Proceso), L_SubProcesos As List(Of Proceso)
- #Region "Métodos Públicos"
- Public Sub EjecutaProceso(sRutaProceso As String)
- Shell(sRutaProceso, AppWinStyle.NormalFocus)
- End Sub
- Public Sub MataProceso(sProceso As String)
- Dim Procesos() As Process
- Procesos = Process.GetProcessesByName(sProceso)
- For Each Proceso As Process In Procesos
- Proceso.Kill()
- Next
- End Sub
- 'Public Function ExisteVentana(sTitulo As String) As Boolean
- ' colWin.Clear()
- ' EnumWindows(AddressOf EnumWindowsProc, 0)
- ' For Each s As String In colWin.Keys
- ' If Trim(LCase(colWin(s))) = Trim(LCase(sTitulo)) Then
- ' Return True
- ' End If
- ' ' Debug.Print(s & " : " & colWin(s))
- ' Next
- ' Return False
- 'End Function
- Public Function ExisteVentana(Optional sNombre As String = "", Optional sTitulo As String = "", Optional bExacto As Boolean = False) As Boolean
- Dim bExiste As Boolean = False
- Dim StrNombre As String = "", StrTitulo As String = ""
- For Each proc As Process In Process.GetProcesses
- StrNombre = Trim(LCase(proc.ProcessName))
- StrTitulo = Trim(LCase(proc.MainWindowTitle))
- If sNombre <> "" Then
- If bExacto And StrNombre = Trim(LCase(sNombre)) Then bExiste = True
- If Not bExacto And InStr(1, StrNombre, Trim(LCase(sNombre))) > 0 Then bExiste = True
- End If
- If sTitulo <> "" Then
- If bExacto And StrTitulo = Trim(LCase(sTitulo)) Then bExiste = True
- If Not bExacto And InStr(1, StrTitulo, Trim(LCase(sTitulo))) > 0 Then bExiste = True
- End If
- If bExiste Then
- ' iId = proc.MainWindowHandle
- Return True
- End If
- ' If StrTitulo <> "" Then
- Debug.Print("NOMBRE : " & proc.ProcessName & vbCrLf & _
- "TITULO : " & proc.MainWindowTitle)
- 'End If
- Next
- Return False
- End Function
- Public Sub EnfocaVentana(Id As IntPtr, Optional sNombre As String = "", Optional sTitulo As String = "", Optional bExacto As Boolean = False)
- Dim bEnfoca As Boolean = False
- Dim StrNombre As String = "", StrTitulo As String = ""
- Dim IdVentana As IntPtr
- If CInt(Id) > 0 Then
- ShowWindow(Id, 9)
- SetForegroundWindow(Id)
- Exit Sub
- End If
- For Each proc As Process In Process.GetProcesses
- StrNombre = Trim(LCase(proc.ProcessName))
- StrTitulo = Trim(LCase(proc.MainWindowTitle))
- If sNombre <> "" Then
- If Not bExacto And StrNombre = Trim(LCase(sNombre)) Then bEnfoca = True
- If bExacto And InStr(1, StrNombre, Trim(LCase(sNombre))) > 0 Then bEnfoca = True
- End If
- If sTitulo <> "" Then
- If Not bExacto And StrTitulo = Trim(LCase(sTitulo)) Then bEnfoca = True
- If bExacto And InStr(1, StrTitulo, Trim(LCase(sTitulo))) > 0 Then bEnfoca = True
- End If
- If bEnfoca Then
- IdVentana = proc.MainWindowHandle
- ShowWindow(proc.MainWindowHandle, 9)
- SetForegroundWindow(proc.MainWindowHandle)
- Exit Sub
- End If
- 'Debug.Print("NOMBRE : " & proc.ProcessName & vbCrLf & _
- ' "TITULO : " & proc.MainWindowTitle)
- Next
- End Sub
- Public Sub EnviaTeclas(StrTeclas As String)
- Dim Arr_Teclas() As String
- Arr_Teclas = Split(StrTeclas, ";")
- For Each item In Arr_Teclas
- SendKeys.Send(item)
- ' Sleep(500)
- Next
- End Sub
- 'Public Sub EnumerarVentanas()
- ' Dim E_ProcesoProps As ProcesoProps
- ' ' Enumera las ventanas principales (TopWindows)
- ' colWin.Clear()
- ' EnumWindows(AddressOf EnumWindowsProc, 0)
- ' L_Raiz = New List(Of ProcesoProps)
- ' For Each s As String In colWin.Keys
- ' E_ProcesoProps = New ProcesoProps
- ' E_ProcesoProps.Id = s
- ' E_ProcesoProps.Nombre = colWin(s)
- ' L_Raiz.Add(E_ProcesoProps)
- ' Next
- ' E_ProcesoProps = Nothing
- 'End Sub
- 'Public Sub CargaProcesos()
- ' 'If L_Procesos IsNot Nothing Then L_Procesos.Clear()
- ' L_Procesos = New List(Of Proceso)
- ' 'For Each proc As Process In Process.GetProcesses
- ' ' oProceso = New Proceso
- ' ' oProceso.Id = proc.Id
- ' ' oProceso.Nombre = Trim(LCase(proc.ProcessName))
- ' ' oProceso.TituloVentana = Trim(LCase(proc.MainWindowTitle))
- ' ' Try
- ' ' oProceso.SubProcesos = CargaSubProcesos(oProceso.Id)
- ' ' oProceso.iSubprocesos = oProceso.SubProcesos.Count
- ' ' Catch ex As Exception
- ' ' oProceso.SubProcesos = New List(Of Proceso)
- ' ' oProceso.iSubprocesos = oProceso.SubProcesos.Count
- ' ' End Try
- ' ' ' Debug.Print(oProceso.Nombre)
- ' ' L_Procesos.Add(oProceso)
- ' 'Next
- ' '*** METODO 2
- ' colWin.Clear()
- ' EnumWindows(AddressOf EnumWindowsProc, 0)
- ' For Each s As String In colWin.Keys
- ' oProceso = New Proceso
- ' oProceso.Id = s
- ' oProceso.Nombre = Trim(LCase(colWin(s)))
- ' oProceso.TituloVentana = ""
- ' oProceso.SubProcesos = New List(Of Proceso)
- ' oProceso.iSubprocesos = oProceso.SubProcesos.Count
- ' L_Procesos.Add(oProceso)
- ' Next
- ' oProceso = Nothing
- 'End Sub
- 'Public Function CargaSubProcesos(IdPadre As IntPtr) As List(Of Proceso)
- ' CargaSubProcesos = New List(Of Proceso)
- ' Try
- ' Dim ProcPadre As Process = Process.GetProcessById(IdPadre)
- ' colWin.Clear()
- ' EnumChildWindows(IdPadre, AddressOf EnumWindowsProc, 0)
- ' Catch ex As Exception
- ' Dim sError As String = ex.Message
- ' Exit Function
- ' End Try
- ' 'For Each proc As Process In ProcPadre.GetProcesses
- ' ' E_ProcesoProps = New ProcesoProps
- ' ' E_ProcesoProps.Id = proc.Id.ToString
- ' ' E_ProcesoProps.Nombre = Trim(LCase(proc.ProcessName))
- ' ' E_ProcesoProps.Titulo = Trim(LCase(proc.MainWindowTitle))
- ' ' L_Raiz.Add(E_ProcesoProps)
- ' 'Next
- ' For Each s As String In colWin.Keys
- ' oProceso = New Proceso
- ' oProceso.Id = s
- ' oProceso.Nombre = colWin(s)
- ' CargaSubProcesos.Add(oProceso)
- ' Next
- ' For i As Integer = 0 To L_Procesos.Count
- ' If L_Procesos(i).Id = IdPadre Then L_Procesos(i).SubProcesos = CargaSubProcesos
- ' Next
- 'End Function
- Public Sub CargaProcesos()
- L_Procesos = New List(Of Proceso)
- colWin.Clear()
- EnumWindows(AddressOf EnumWindowsProc, 0)
- For Each s As String In colWin.Keys
- oProceso = New Proceso
- oProceso.Id = s
- oProceso.Nombre = Trim(LCase(colWin(s)))
- oProceso.TituloVentana = ""
- oProceso.SubProcesos = New List(Of Proceso)
- oProceso.iSubprocesos = oProceso.SubProcesos.Count
- 'Try
- ' CargaSubProcesos(CInt(oProceso.Id))
- ' oProceso.SubProcesos = L_SubProcesos
- ' oProceso.iSubprocesos = oProceso.SubProcesos.Count
- 'Catch ex As Exception
- ' oProceso.SubProcesos = New List(Of Proceso)
- ' oProceso.iSubprocesos = oProceso.SubProcesos.Count
- 'End Try
- L_Procesos.Add(oProceso)
- Next
- ''***** METODO 2
- 'For Each proc As Process In Process.GetProcesses
- ' oProceso = New Proceso
- ' oProceso.Id = proc.Id
- ' oProceso.Nombre = Trim(LCase(proc.ProcessName))
- ' oProceso.TituloVentana = Trim(LCase(proc.MainWindowTitle))
- ' Try
- ' CargaSubProcesos(oProceso.Id)
- ' oProceso.SubProcesos = L_SubProcesos
- ' oProceso.iSubprocesos = oProceso.SubProcesos.Count
- ' Catch ex As Exception
- ' oProceso.SubProcesos = New List(Of Proceso)
- ' oProceso.iSubprocesos = oProceso.SubProcesos.Count
- ' End Try
- ' ' Debug.Print(oProceso.Nombre)
- ' L_Procesos.Add(oProceso)
- 'Next
- End Sub
- Public Sub CargaSubProcesos(ByVal handleParent As System.IntPtr)
- ' Enumera las ventanas hijas del handle indicado
- colWin.Clear()
- EnumChildWindows(handleParent, AddressOf EnumWindowsProc, 0)
- L_SubProcesos = New List(Of Proceso)
- For Each s As String In colWin.Keys
- oProceso = New Proceso
- oProceso.Id = s
- oProceso.Nombre = colWin(s)
- L_SubProcesos.Add(oProceso)
- Next
- For i As Integer = 0 To L_Procesos.Count - 1
- If L_Procesos(i).Id = handleParent Then L_Procesos(i).SubProcesos = L_SubProcesos
- Next
- End Sub
- 'Public Sub enumerarVentanasHijas(ByVal handleParent As System.IntPtr)
- ' Dim E_ProcesoProps As ProcesoProps
- ' ' Enumera las ventanas hijas del handle indicado
- ' colWin.Clear()
- ' EnumChildWindows(handleParent, AddressOf EnumWindowsProc, 0)
- ' L_Hijos = New List(Of ProcesoProps)
- ' For Each s As String In colWin.Keys
- ' E_ProcesoProps = New ProcesoProps
- ' E_ProcesoProps.Id = s
- ' E_ProcesoProps.Nombre = colWin(s)
- ' L_Hijos.Add(E_ProcesoProps)
- ' Next
- ' E_ProcesoProps = Nothing
- 'End Sub
- #End Region
- '************* USO DE EnfocaVentana() y EnviaTeclas()
- 'Dim oVentana As Procesos
- ' oVentana = New Procesos
- 'If oVentana.ExisteVentana("FIREFOX", "") Then
- ''oVentana.EnfocaVentana(0, "FIREFOX", "")
- ' oVentana.EnfocaVentana(oVentana.IdVentana)
- ' oVentana.EnviaTeclas("http://www.elpais.es;{ENTER}")
- ' End If
- #Region "RECURSOS"
- 'Private Sub fEnumWindows_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- ' Me.btnChild.Enabled = False
- 'End Sub
- ''
- 'Private Sub btnTop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTop.Click
- ' ' mostrar las ventanas Top
- ' btnChild.Enabled = False
- ' EnumerarVentanas()
- 'End Sub
- ''
- 'Private Sub btnChild_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChild.Click
- ' ' mostrar las ventanas hijas de la seleccionada
- ' Dim s As String = lvTop.SelectedItems(0).Text
- ' Dim hParent As System.IntPtr = System.IntPtr.op_Explicit(CInt(s))
- ' Me.enumerarVentanasHijas(hParent)
- 'End Sub
- 'Private Sub EnumerarVentanas()
- ' ' Enumera las ventanas principales (TopWindows)
- ' colWin.Clear()
- ' EnumWindows(AddressOf EnumWindowsProc, 0)
- ' '
- ' lvTop.Items.Clear()
- ' For Each s As String In colWin.Keys
- ' Dim lvi As ListViewItem = lvTop.Items.Add(s)
- ' lvi.SubItems.Add(colWin(s))
- ' Next
- ' If lvTop.Items.Count > 0 Then
- ' btnChild.Enabled = True
- ' End If
- 'End Sub
- '
- 'Private Sub enumerarVentanasHijas(ByVal handleParent As System.IntPtr)
- ' ' Enumera las ventanas hijas del handle indicado
- ' colWin.Clear()
- ' EnumChildWindows(handleParent, AddressOf EnumWindowsProc, 0)
- ' '
- ' lvChild.Items.Clear()
- ' For Each s As String In colWin.Keys
- ' Dim lvi As ListViewItem = lvChild.Items.Add(s)
- ' lvi.SubItems.Add(colWin(s))
- ' Next
- 'End Sub
- #End Region
- End Class
- Public Class Proceso
- #Region "PROPIEDADES"
- Public SubProcesos As List(Of Proceso)
- Private iId As IntPtr
- Public Property Id() As IntPtr
- Get
- Return iId
- End Get
- Set(ByVal value As IntPtr)
- iId = value
- End Set
- End Property
- Private sNombre As String
- Public Property Nombre() As String
- Get
- Return sNombre
- End Get
- Set(ByVal value As String)
- sNombre = value
- End Set
- End Property
- Private sTituloVentana As String
- Public Property TituloVentana() As String
- Get
- Return sTituloVentana
- End Get
- Set(ByVal value As String)
- sTituloVentana = value
- End Set
- End Property
- Private iiSubprocesos As Integer
- Public Property iSubprocesos() As Integer
- Get
- Return iiSubprocesos
- End Get
- Set(ByVal value As Integer)
- iiSubprocesos = value
- End Set
- End Property
- #End Region
- End Class
Advertisement
Add Comment
Please, Sign In to add comment