Constancia

VB_CLS_Procesos

Jul 12th, 2015
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 15.35 KB | None | 0 0
  1. Imports System
  2. Imports System.Threading
  3.  
  4. Public Class Procesos
  5.  
  6.     Private oProceso As Proceso
  7.  
  8. #Region "API Windows"
  9.  
  10.  
  11.     Private Delegate Function EnumWindowsDelegate(ByVal hWnd As System.IntPtr, ByVal parametro As Integer) As Boolean
  12.     Private Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Integer) As Integer
  13.     Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
  14.  
  15.     ' Para EnumWindows
  16.     Private colWin As New System.Collections.Specialized.StringDictionary
  17.  
  18.     <System.Runtime.InteropServices.DllImport("user32.dll")> _
  19.     Private Shared Function ShowWindow( _
  20.                     hWnd As IntPtr, _
  21.                     nCmdShow As Integer) As Boolean
  22.     End Function
  23.  
  24.     <System.Runtime.InteropServices.DllImport("user32.dll")> _
  25.     Private Shared Function EnumWindows( _
  26.             ByVal lpfn As EnumWindowsDelegate, _
  27.             ByVal lParam As Integer) As Boolean
  28.     End Function
  29.     '
  30.     <System.Runtime.InteropServices.DllImport("user32.dll")> _
  31.     Private Shared Function EnumChildWindows _
  32.             (ByVal hWndParent As System.IntPtr, _
  33.             ByVal lpEnumFunc As EnumWindowsDelegate, _
  34.             ByVal lParam As Integer) As Integer
  35.     End Function
  36.  
  37.     <System.Runtime.InteropServices.DllImport("user32.dll")> _
  38.     Private Shared Function GetWindowText( _
  39.             ByVal hWnd As System.IntPtr, _
  40.             ByVal lpString As System.Text.StringBuilder, _
  41.             ByVal cch As Integer) As Integer
  42.     End Function
  43.  
  44.     Private Function EnumWindowsProc(ByVal hWnd As System.IntPtr, ByVal parametro As Integer) As Boolean
  45.         ' Esta función "callback" se usará con EnumWindows y EnumChildWindows
  46.         Dim titulo As New System.Text.StringBuilder(New String(" "c, 256))
  47.         Dim ret As Integer
  48.         Dim nombreVentana As String
  49.         '
  50.         ret = GetWindowText(hWnd, titulo, titulo.Length)
  51.         If ret = 0 Then Return True
  52.         '
  53.         nombreVentana = titulo.ToString.Substring(0, ret)
  54.         If nombreVentana <> Nothing AndAlso nombreVentana.Length > 0 Then
  55.             colWin.Add(hWnd.ToString, nombreVentana)
  56.         End If
  57.         '
  58.         Return True
  59.     End Function
  60.  
  61.  
  62. #End Region
  63.  
  64.  
  65.     Public L_Procesos As List(Of Proceso), L_SubProcesos As List(Of Proceso)
  66.  
  67.  
  68. #Region "Métodos Públicos"
  69.  
  70.     Public Sub EjecutaProceso(sRutaProceso As String)
  71.         Shell(sRutaProceso, AppWinStyle.NormalFocus)
  72.     End Sub
  73.  
  74.     Public Sub MataProceso(sProceso As String)
  75.  
  76.         Dim Procesos() As Process
  77.  
  78.         Procesos = Process.GetProcessesByName(sProceso)
  79.  
  80.         For Each Proceso As Process In Procesos
  81.             Proceso.Kill()
  82.         Next
  83.  
  84.     End Sub
  85.  
  86.    
  87.     'Public Function ExisteVentana(sTitulo As String) As Boolean
  88.  
  89.     '    colWin.Clear()
  90.     '    EnumWindows(AddressOf EnumWindowsProc, 0)
  91.  
  92.     '    For Each s As String In colWin.Keys
  93.  
  94.     '        If Trim(LCase(colWin(s))) = Trim(LCase(sTitulo)) Then
  95.     '            Return True
  96.     '        End If
  97.  
  98.     '        ' Debug.Print(s & " : " & colWin(s))
  99.     '    Next
  100.  
  101.     '    Return False
  102.  
  103.     'End Function
  104.  
  105.     Public Function ExisteVentana(Optional sNombre As String = "", Optional sTitulo As String = "", Optional bExacto As Boolean = False) As Boolean
  106.  
  107.         Dim bExiste As Boolean = False
  108.         Dim StrNombre As String = "", StrTitulo As String = ""
  109.  
  110.         For Each proc As Process In Process.GetProcesses
  111.  
  112.             StrNombre = Trim(LCase(proc.ProcessName))
  113.             StrTitulo = Trim(LCase(proc.MainWindowTitle))
  114.  
  115.             If sNombre <> "" Then
  116.                 If bExacto And StrNombre = Trim(LCase(sNombre)) Then bExiste = True
  117.                 If Not bExacto And InStr(1, StrNombre, Trim(LCase(sNombre))) > 0 Then bExiste = True
  118.             End If
  119.  
  120.             If sTitulo <> "" Then
  121.                 If bExacto And StrTitulo = Trim(LCase(sTitulo)) Then bExiste = True
  122.                 If Not bExacto And InStr(1, StrTitulo, Trim(LCase(sTitulo))) > 0 Then bExiste = True
  123.             End If
  124.  
  125.             If bExiste Then
  126.                 ' iId = proc.MainWindowHandle
  127.                 Return True
  128.             End If
  129.  
  130.             ' If StrTitulo <> "" Then
  131.             Debug.Print("NOMBRE : " & proc.ProcessName & vbCrLf & _
  132.              "TITULO : " & proc.MainWindowTitle)
  133.             'End If
  134.         Next
  135.  
  136.         Return False
  137.  
  138.     End Function
  139.  
  140.     Public Sub EnfocaVentana(Id As IntPtr, Optional sNombre As String = "", Optional sTitulo As String = "", Optional bExacto As Boolean = False)
  141.  
  142.         Dim bEnfoca As Boolean = False
  143.         Dim StrNombre As String = "", StrTitulo As String = ""
  144.         Dim IdVentana As IntPtr
  145.  
  146.         If CInt(Id) > 0 Then
  147.             ShowWindow(Id, 9)
  148.             SetForegroundWindow(Id)
  149.             Exit Sub
  150.         End If
  151.  
  152.         For Each proc As Process In Process.GetProcesses
  153.  
  154.             StrNombre = Trim(LCase(proc.ProcessName))
  155.             StrTitulo = Trim(LCase(proc.MainWindowTitle))
  156.  
  157.             If sNombre <> "" Then
  158.                 If Not bExacto And StrNombre = Trim(LCase(sNombre)) Then bEnfoca = True
  159.                 If bExacto And InStr(1, StrNombre, Trim(LCase(sNombre))) > 0 Then bEnfoca = True
  160.             End If
  161.  
  162.             If sTitulo <> "" Then
  163.                 If Not bExacto And StrTitulo = Trim(LCase(sTitulo)) Then bEnfoca = True
  164.                 If bExacto And InStr(1, StrTitulo, Trim(LCase(sTitulo))) > 0 Then bEnfoca = True
  165.             End If
  166.  
  167.             If bEnfoca Then
  168.                 IdVentana = proc.MainWindowHandle
  169.                 ShowWindow(proc.MainWindowHandle, 9)
  170.                 SetForegroundWindow(proc.MainWindowHandle)
  171.                 Exit Sub
  172.             End If
  173.  
  174.             'Debug.Print("NOMBRE : " & proc.ProcessName & vbCrLf & _
  175.             '  "TITULO : " & proc.MainWindowTitle)
  176.  
  177.         Next
  178.  
  179.     End Sub
  180.  
  181.     Public Sub EnviaTeclas(StrTeclas As String)
  182.  
  183.         Dim Arr_Teclas() As String
  184.  
  185.         Arr_Teclas = Split(StrTeclas, ";")
  186.  
  187.         For Each item In Arr_Teclas
  188.             SendKeys.Send(item)
  189.             ' Sleep(500)
  190.         Next
  191.  
  192.     End Sub
  193.  
  194.  
  195.  
  196.     'Public Sub EnumerarVentanas()
  197.  
  198.     '    Dim E_ProcesoProps As ProcesoProps
  199.  
  200.     '    ' Enumera las ventanas principales (TopWindows)
  201.     '    colWin.Clear()
  202.     '    EnumWindows(AddressOf EnumWindowsProc, 0)
  203.  
  204.     '    L_Raiz = New List(Of ProcesoProps)
  205.  
  206.     '    For Each s As String In colWin.Keys
  207.  
  208.     '        E_ProcesoProps = New ProcesoProps
  209.     '        E_ProcesoProps.Id = s
  210.     '        E_ProcesoProps.Nombre = colWin(s)
  211.  
  212.     '        L_Raiz.Add(E_ProcesoProps)
  213.  
  214.     '    Next
  215.  
  216.     '    E_ProcesoProps = Nothing
  217.  
  218.     'End Sub
  219.  
  220.     'Public Sub CargaProcesos()
  221.  
  222.  
  223.     '    'If L_Procesos IsNot Nothing Then L_Procesos.Clear()
  224.     '    L_Procesos = New List(Of Proceso)
  225.  
  226.     '    'For Each proc As Process In Process.GetProcesses
  227.     '    '    oProceso = New Proceso
  228.     '    '    oProceso.Id = proc.Id
  229.     '    '    oProceso.Nombre = Trim(LCase(proc.ProcessName))
  230.     '    '    oProceso.TituloVentana = Trim(LCase(proc.MainWindowTitle))
  231.     '    '    Try
  232.     '    '        oProceso.SubProcesos = CargaSubProcesos(oProceso.Id)
  233.     '    '        oProceso.iSubprocesos = oProceso.SubProcesos.Count
  234.     '    '    Catch ex As Exception
  235.     '    '        oProceso.SubProcesos = New List(Of Proceso)
  236.     '    '        oProceso.iSubprocesos = oProceso.SubProcesos.Count
  237.     '    '    End Try
  238.  
  239.     '    '    ' Debug.Print(oProceso.Nombre)
  240.  
  241.     '    '    L_Procesos.Add(oProceso)
  242.     '    'Next
  243.  
  244.     '    '*** METODO 2
  245.     '    colWin.Clear()
  246.     '    EnumWindows(AddressOf EnumWindowsProc, 0)
  247.  
  248.     '    For Each s As String In colWin.Keys
  249.     '        oProceso = New Proceso
  250.     '        oProceso.Id = s
  251.     '        oProceso.Nombre = Trim(LCase(colWin(s)))
  252.     '        oProceso.TituloVentana = ""
  253.     '        oProceso.SubProcesos = New List(Of Proceso)
  254.     '        oProceso.iSubprocesos = oProceso.SubProcesos.Count
  255.     '        L_Procesos.Add(oProceso)
  256.  
  257.     '    Next
  258.  
  259.     '    oProceso = Nothing
  260.  
  261.     'End Sub
  262.  
  263.  
  264.     'Public Function CargaSubProcesos(IdPadre As IntPtr) As List(Of Proceso)
  265.  
  266.     '    CargaSubProcesos = New List(Of Proceso)
  267.  
  268.     '    Try
  269.     '        Dim ProcPadre As Process = Process.GetProcessById(IdPadre)
  270.     '        colWin.Clear()
  271.     '        EnumChildWindows(IdPadre, AddressOf EnumWindowsProc, 0)
  272.     '    Catch ex As Exception
  273.     '        Dim sError As String = ex.Message
  274.     '        Exit Function
  275.     '    End Try
  276.  
  277.  
  278.     '    'For Each proc As Process In ProcPadre.GetProcesses
  279.     '    '    E_ProcesoProps = New ProcesoProps
  280.     '    '    E_ProcesoProps.Id = proc.Id.ToString
  281.     '    '    E_ProcesoProps.Nombre = Trim(LCase(proc.ProcessName))
  282.     '    '    E_ProcesoProps.Titulo = Trim(LCase(proc.MainWindowTitle))
  283.  
  284.     '    '    L_Raiz.Add(E_ProcesoProps)
  285.     '    'Next
  286.  
  287.     '    For Each s As String In colWin.Keys
  288.  
  289.     '        oProceso = New Proceso
  290.     '        oProceso.Id = s
  291.     '        oProceso.Nombre = colWin(s)
  292.     '        CargaSubProcesos.Add(oProceso)
  293.  
  294.     '    Next
  295.  
  296.     '    For i As Integer = 0 To L_Procesos.Count
  297.     '        If L_Procesos(i).Id = IdPadre Then L_Procesos(i).SubProcesos = CargaSubProcesos
  298.     '    Next
  299.  
  300.  
  301.     'End Function
  302.  
  303.     Public Sub CargaProcesos()
  304.  
  305.  
  306.         L_Procesos = New List(Of Proceso)
  307.  
  308.         colWin.Clear()
  309.         EnumWindows(AddressOf EnumWindowsProc, 0)
  310.  
  311.         For Each s As String In colWin.Keys
  312.             oProceso = New Proceso
  313.             oProceso.Id = s
  314.             oProceso.Nombre = Trim(LCase(colWin(s)))
  315.             oProceso.TituloVentana = ""
  316.             oProceso.SubProcesos = New List(Of Proceso)
  317.             oProceso.iSubprocesos = oProceso.SubProcesos.Count
  318.             'Try
  319.             '    CargaSubProcesos(CInt(oProceso.Id))
  320.             '    oProceso.SubProcesos = L_SubProcesos
  321.             '    oProceso.iSubprocesos = oProceso.SubProcesos.Count
  322.             'Catch ex As Exception
  323.             '    oProceso.SubProcesos = New List(Of Proceso)
  324.             '    oProceso.iSubprocesos = oProceso.SubProcesos.Count
  325.             'End Try
  326.             L_Procesos.Add(oProceso)
  327.         Next
  328.  
  329.  
  330.         ''***** METODO 2
  331.         'For Each proc As Process In Process.GetProcesses
  332.         '    oProceso = New Proceso
  333.         '    oProceso.Id = proc.Id
  334.         '    oProceso.Nombre = Trim(LCase(proc.ProcessName))
  335.         '    oProceso.TituloVentana = Trim(LCase(proc.MainWindowTitle))
  336.         '    Try
  337.         '        CargaSubProcesos(oProceso.Id)
  338.         '        oProceso.SubProcesos = L_SubProcesos
  339.         '        oProceso.iSubprocesos = oProceso.SubProcesos.Count
  340.         '    Catch ex As Exception
  341.         '        oProceso.SubProcesos = New List(Of Proceso)
  342.         '        oProceso.iSubprocesos = oProceso.SubProcesos.Count
  343.         '    End Try
  344.  
  345.         '    ' Debug.Print(oProceso.Nombre)
  346.  
  347.         '    L_Procesos.Add(oProceso)
  348.         'Next
  349.  
  350.  
  351.  
  352.     End Sub
  353.  
  354.     Public Sub CargaSubProcesos(ByVal handleParent As System.IntPtr)
  355.         ' Enumera las ventanas hijas del handle indicado
  356.         colWin.Clear()
  357.         EnumChildWindows(handleParent, AddressOf EnumWindowsProc, 0)
  358.  
  359.         L_SubProcesos = New List(Of Proceso)
  360.  
  361.         For Each s As String In colWin.Keys
  362.             oProceso = New Proceso
  363.             oProceso.Id = s
  364.             oProceso.Nombre = colWin(s)
  365.             L_SubProcesos.Add(oProceso)
  366.         Next
  367.  
  368.         For i As Integer = 0 To L_Procesos.Count - 1
  369.             If L_Procesos(i).Id = handleParent Then L_Procesos(i).SubProcesos = L_SubProcesos
  370.         Next
  371.  
  372.     End Sub
  373.  
  374.  
  375.  
  376.  
  377.     'Public Sub enumerarVentanasHijas(ByVal handleParent As System.IntPtr)
  378.  
  379.     '    Dim E_ProcesoProps As ProcesoProps
  380.  
  381.     '    ' Enumera las ventanas hijas del handle indicado
  382.     '    colWin.Clear()
  383.     '    EnumChildWindows(handleParent, AddressOf EnumWindowsProc, 0)
  384.  
  385.     '    L_Hijos = New List(Of ProcesoProps)
  386.  
  387.     '    For Each s As String In colWin.Keys
  388.  
  389.     '        E_ProcesoProps = New ProcesoProps
  390.     '        E_ProcesoProps.Id = s
  391.     '        E_ProcesoProps.Nombre = colWin(s)
  392.  
  393.     '        L_Hijos.Add(E_ProcesoProps)
  394.  
  395.     '    Next
  396.  
  397.     '    E_ProcesoProps = Nothing
  398.  
  399.     'End Sub
  400.  
  401. #End Region
  402.  
  403.     '************* USO DE EnfocaVentana() y EnviaTeclas()
  404.     'Dim oVentana As Procesos
  405.  
  406.     '    oVentana = New Procesos
  407.  
  408.     'If oVentana.ExisteVentana("FIREFOX", "") Then
  409.     ''oVentana.EnfocaVentana(0, "FIREFOX", "")
  410.     '    oVentana.EnfocaVentana(oVentana.IdVentana)
  411.     '    oVentana.EnviaTeclas("http://www.elpais.es;{ENTER}")
  412.     ' End If
  413.  
  414.  
  415. #Region "RECURSOS"
  416.  
  417.  
  418.     'Private Sub fEnumWindows_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  419.     '    Me.btnChild.Enabled = False
  420.     'End Sub
  421.     ''
  422.     'Private Sub btnTop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTop.Click
  423.     '    ' mostrar las ventanas Top
  424.     '    btnChild.Enabled = False
  425.     '    EnumerarVentanas()
  426.     'End Sub
  427.     ''
  428.     'Private Sub btnChild_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChild.Click
  429.     '    ' mostrar las ventanas hijas de la seleccionada
  430.     '    Dim s As String = lvTop.SelectedItems(0).Text
  431.     '    Dim hParent As System.IntPtr = System.IntPtr.op_Explicit(CInt(s))
  432.     '    Me.enumerarVentanasHijas(hParent)
  433.     'End Sub
  434.  
  435.  
  436.     'Private Sub EnumerarVentanas()
  437.     '    ' Enumera las ventanas principales (TopWindows)
  438.     '    colWin.Clear()
  439.     '    EnumWindows(AddressOf EnumWindowsProc, 0)
  440.     '    '
  441.     '    lvTop.Items.Clear()
  442.     '    For Each s As String In colWin.Keys
  443.     '        Dim lvi As ListViewItem = lvTop.Items.Add(s)
  444.     '        lvi.SubItems.Add(colWin(s))
  445.     '    Next
  446.     '    If lvTop.Items.Count > 0 Then
  447.     '        btnChild.Enabled = True
  448.     '    End If
  449.     'End Sub
  450.     '
  451.     'Private Sub enumerarVentanasHijas(ByVal handleParent As System.IntPtr)
  452.     '    ' Enumera las ventanas hijas del handle indicado
  453.     '    colWin.Clear()
  454.     '    EnumChildWindows(handleParent, AddressOf EnumWindowsProc, 0)
  455.     '    '
  456.     '    lvChild.Items.Clear()
  457.     '    For Each s As String In colWin.Keys
  458.     '        Dim lvi As ListViewItem = lvChild.Items.Add(s)
  459.     '        lvi.SubItems.Add(colWin(s))
  460.     '    Next
  461.     'End Sub
  462.  
  463. #End Region
  464.  
  465. End Class
  466.  
  467.  
  468. Public Class Proceso
  469.  
  470. #Region "PROPIEDADES"
  471.  
  472.     Public SubProcesos As List(Of Proceso)
  473.  
  474.     Private iId As IntPtr
  475.     Public Property Id() As IntPtr
  476.         Get
  477.             Return iId
  478.         End Get
  479.         Set(ByVal value As IntPtr)
  480.             iId = value
  481.         End Set
  482.     End Property
  483.  
  484.     Private sNombre As String
  485.     Public Property Nombre() As String
  486.         Get
  487.             Return sNombre
  488.         End Get
  489.         Set(ByVal value As String)
  490.             sNombre = value
  491.         End Set
  492.     End Property
  493.  
  494.     Private sTituloVentana As String
  495.     Public Property TituloVentana() As String
  496.         Get
  497.             Return sTituloVentana
  498.         End Get
  499.         Set(ByVal value As String)
  500.             sTituloVentana = value
  501.         End Set
  502.     End Property
  503.  
  504.     Private iiSubprocesos As Integer
  505.     Public Property iSubprocesos() As Integer
  506.         Get
  507.             Return iiSubprocesos
  508.         End Get
  509.         Set(ByVal value As Integer)
  510.             iiSubprocesos = value
  511.         End Set
  512.     End Property
  513.  
  514. #End Region
  515.  
  516. End Class
Advertisement
Add Comment
Please, Sign In to add comment