elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Obtener el nombre de Proceso de un Programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Obtener el nombre de Proceso de un Programa  (Leído 2,987 veces)
**Aincrad**


Desconectado Desconectado

Mensajes: 683



Ver Perfil WWW
Obtener el nombre de Proceso de un Programa
« en: 17 Diciembre 2017, 18:08 pm »

Como dice el titulo quiero obtener el nombre de Proceso de un Programa al ejecutarlo .

lo que quiero es que al ejecutar por ejemplo counter strike 1.6 obtener el nombre del proceso que es ese caso es hl.exe

tengo el sig code para ejuecutarlo pero tambien quiero obtener el nombre del proceso en un label:

Código
  1. Dim Pr As New Process
  2.                Dim Psi As New ProcessStartInfo("counterstrike.exe")
  3.                Pr.StartInfo = Psi
  4.                Pr.StartInfo.WindowStyle = ProcessWindowStyle.Normal
  5.                Pr.Start()

no se si para obtener el proceso seria algo como esto Label3.Text = Pr.ProcessName

Gracias de Antemano  ;D


En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Obtener el nombre de Proceso de un Programa
« Respuesta #1 en: 20 Diciembre 2017, 13:35 pm »

no se si para obtener el proceso seria algo como esto Label3.Text = Pr.ProcessName

Si, pero no entiendo la pregunta, ya que por un lado dices que el nombre del executable se llama "hl.exe", pero por otro lado el nombre del executable que declaras en la clase Process se llama "counterstrike.exe", ¿en que quedamos?.

...eso me hace sospechar que o bien te equivocaste, o a lo mejor "counterstrike.exe" es una especie de launcher o loader. Ten en cuenta que evidentemente la propiedad Process.ProcessName no te va a devolver el nombre de un proceso hijo en el árbol de procesos, es decir, un proceso secundario (hijo) que haya sido ejecutado por el proceso principal (padre). Para obtener los procesos hijo puedes realizar una consulta a las clases de WMI (Windows Management Instrumentation). Por si te sirve, aquí te dejo una función reutilizable que he extraido de mi framework comercial ElektroKit:

Código
  1. #Region " Imports "
  2.  
  3. Imports System.ComponentModel
  4. Imports System.Management
  5. Imports System.Runtime.CompilerServices
  6.  
  7. #End Region
  8.  
  9. #Region " Process Extensions "
  10.  
  11. Namespace ElektroKit.Core.Extensions.Process
  12.  
  13.    ''' ----------------------------------------------------------------------------------------------------
  14.    ''' <summary>
  15.    ''' Contains custom extension methods to use with the <see cref="Process"/> type.
  16.    ''' </summary>
  17.    ''' ----------------------------------------------------------------------------------------------------
  18.    <HideModuleName>
  19.    Public Module ProcessExtensions
  20.  
  21. #Region " Public Extension Methods "
  22.  
  23.        ''' ----------------------------------------------------------------------------------------------------
  24.        ''' <summary>
  25.        ''' Gets the child processes of the source <see cref="Process"/>.
  26.        ''' </summary>
  27.        ''' ----------------------------------------------------------------------------------------------------
  28.        ''' <example> This is a code example.
  29.        ''' <code>
  30.        ''' Dim mainProcess As Process = Process.GetProcessesByName("Explorer").Single()
  31.        ''' Dim childProcesses As IEnumerable(Of Process) = mainProcess.GetChildProcesses()
  32.        '''
  33.        ''' For Each p As Process In childProcesses
  34.        '''     Console.WriteLine(p.ProcessName)
  35.        ''' Next
  36.        ''' </code>
  37.        ''' </example>
  38.        ''' ----------------------------------------------------------------------------------------------------
  39.        ''' <param name="sender">
  40.        ''' The source <see cref="Process"/>.
  41.        ''' </param>
  42.        ''' ----------------------------------------------------------------------------------------------------
  43.        ''' <returns>
  44.        ''' A <see cref="IEnumerable(Of Process)"/> containing the child processes.
  45.        ''' </returns>
  46.        ''' ----------------------------------------------------------------------------------------------------
  47.        <DebuggerStepThrough>
  48.        <Extension>
  49.        <EditorBrowsable(EditorBrowsableState.Always)>
  50.        Public Iterator Function GetChildProcesses(ByVal sender As Process) As IEnumerable(Of Process)
  51.  
  52.            Dim scope As New ManagementScope("root\CIMV2")
  53.            Dim query As New SelectQuery(String.Format("SELECT ProcessID FROM Win32_Process WHERE ParentProcessID={0}", sender.Id))
  54.            Dim options As New EnumerationOptions With {
  55.                .ReturnImmediately = True,
  56.                .Rewindable = False,
  57.                .DirectRead = True,
  58.                .EnumerateDeep = False
  59.            }
  60.  
  61.            Using mos As New ManagementObjectSearcher(scope, query, options),
  62.                  moc As ManagementObjectCollection = mos.Get()
  63.  
  64.                For Each mo As ManagementObject In moc
  65.                    Dim value As Object = mo.Properties("ProcessID").Value()
  66.                    If (value IsNot Nothing) Then
  67.                        Yield Process.GetProcessById(Convert.ToInt32(value))
  68.                    End If
  69.                Next
  70.            End Using
  71.  
  72.        End Function
  73.  
  74. #End Region
  75.  
  76.    End Module
  77.  
  78. End Namespace
  79.  
  80. #End Region

Modo de empleo:
Código
  1. Imports ElektroKit.Core.Extensions.Process

Código
  1. Dim mainProcess As Process = Process.GetProcessesByName("Explorer").Single()
  2. Dim childProcesses As IEnumerable(Of Process) = mainProcess.GetChildProcesses()
  3.  
  4. For Each p As Process In childProcesses
  5.    Console.WriteLine(p.ProcessName)
  6. Next

Saludos.


« Última modificación: 20 Diciembre 2017, 13:57 pm por Eleкtro » En línea



**Aincrad**


Desconectado Desconectado

Mensajes: 683



Ver Perfil WWW
Re: Obtener el nombre de Proceso de un Programa
« Respuesta #2 en: 20 Diciembre 2017, 13:54 pm »

esto es justo lo que andaba buscando .  ;-)

esto fue lo que hice :


Código
  1. ...
« Última modificación: 22 Diciembre 2018, 23:00 pm por **Aincrad** » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines