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:
#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:
Imports ElektroKit.Core.Extensions.Process
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.