Obtener el nombre de Proceso de un Programa

Iniciado por **Aincrad**, 17 Diciembre 2017, 18:08 PM

0 Miembros y 1 Visitante están viendo este tema.

**Aincrad**

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 (vbnet) [Seleccionar]
Dim Pr As New Process
                Dim Psi As New ProcessStartInfo("counterstrike.exe")
                Pr.StartInfo = Psi
                Pr.StartInfo.WindowStyle = ProcessWindowStyle.Normal
                Pr.Start()


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

Gracias de Antemano  ;D




Eleкtro

#1
Cita de: **Aincrad** en 17 Diciembre 2017, 18:08 PMno 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 (vbnet) [Seleccionar]
#Region " Imports "

Imports System.ComponentModel
Imports System.Management
Imports System.Runtime.CompilerServices

#End Region

#Region " Process Extensions "

Namespace ElektroKit.Core.Extensions.Process

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Contains custom extension methods to use with the <see cref="Process"/> type.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   <HideModuleName>
   Public Module ProcessExtensions

#Region " Public Extension Methods "

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Gets the child processes of the source <see cref="Process"/>.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Dim mainProcess As Process = Process.GetProcessesByName("Explorer").Single()
       ''' Dim childProcesses As IEnumerable(Of Process) = mainProcess.GetChildProcesses()
       '''
       ''' For Each p As Process In childProcesses
       '''     Console.WriteLine(p.ProcessName)
       ''' Next
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="sender">
       ''' The source <see cref="Process"/>.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <returns>
       ''' A <see cref="IEnumerable(Of Process)"/> containing the child processes.
       ''' </returns>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Iterator Function GetChildProcesses(ByVal sender As Process) As IEnumerable(Of Process)

           Dim scope As New ManagementScope("root\CIMV2")
           Dim query As New SelectQuery(String.Format("SELECT ProcessID FROM Win32_Process WHERE ParentProcessID={0}", sender.Id))
           Dim options As New EnumerationOptions With {
               .ReturnImmediately = True,
               .Rewindable = False,
               .DirectRead = True,
               .EnumerateDeep = False
           }

           Using mos As New ManagementObjectSearcher(scope, query, options),
                 moc As ManagementObjectCollection = mos.Get()

               For Each mo As ManagementObject In moc
                   Dim value As Object = mo.Properties("ProcessID").Value()
                   If (value IsNot Nothing) Then
                       Yield Process.GetProcessById(Convert.ToInt32(value))
                   End If
               Next
           End Using

       End Function

#End Region

   End Module

End Namespace

#End Region


Modo de empleo:
Código (vbnet) [Seleccionar]
Imports ElektroKit.Core.Extensions.Process

Código (vbnet) [Seleccionar]
Dim mainProcess As Process = Process.GetProcessesByName("Explorer").Single()
Dim childProcesses As IEnumerable(Of Process) = mainProcess.GetChildProcesses()

For Each p As Process In childProcesses
   Console.WriteLine(p.ProcessName)
Next


Saludos.








**Aincrad**

#2
esto es justo lo que andaba buscando .  ;-)

esto fue lo que hice :


Código (vbnet) [Seleccionar]
...