Cita de: rigorvzla en 8 Enero 2019, 17:41 PMcomo podria obtener el nombre de un proceso seleccionado desde un listbox?
Si solo conoces el nombre del proceso entonces debes usar la función Process.GetProcessesByName() (como en el ejemplo que te mostré.). Dicha función devolverá un Array, puesto que puede haber más de un proceso en ejecución con el mismo nombre, por ende, debes utilizar algún criterio adicional para elegir un único proceso del Array. Lo ideal es que te asegures de conocer el identificador de proceso (PID), ya que dicho identificador es único, y de esa manera puedes usar la función Process.GetProcessById() para devolver un único proceso / elemento...
un ejemplo:
VB.NET:
Código (vbnet) [Seleccionar]
Dim prDict As New SortedDictionary(Of String, Integer)(
Process.GetProcesses().ToDictionary(Function(pr) String.Format("{0} [{1}]", pr.ProcessName, pr.Id),
Function(pr) pr.Id), StringComparer.Ordinal)
Me.ListBox1.DataSource = prDict.Keys.ToList()
...
Código (vbnet) [Seleccionar]
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim lb As ListBox = DirectCast(sender, ListBox)
Dim pid As Integer = prDict(lb.SelectedItem.ToString())
Dim pr As Process = Process.GetProcessById(pid)
' ...
End Sub
C#:
Código (csharp) [Seleccionar]
SortedDictionary<string, int> prDict =
new SortedDictionary<string, int>(Process.GetProcesses().ToDictionary(
(pr) => string.Format("{0} [{1}]", pr.ProcessName, pr.Id), (pr) => pr.Id),
StringComparer.Ordinal);
this.listBox1.DataSource = prDict.Keys.ToList();
...
Código (csharp) [Seleccionar]
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
ListBox lb = (ListBox)sender;
int pid = prDict[lb.SelectedItem.ToString()];
Process pr = Process.GetProcessById(pid);
// ...
}
Nótese que este ejemplo tan solo tiene el objetivo de demostrarte como solucionar el problema que has descrito. No se tiene en cuenta si un proceso sigue en ejecución o se terminó despues de haber seleccionado el nombre de dicho proceso en el ListBox; para ello siempre puedes utilizar una colección que implemente la interfaz INotifyCollectionChanged (ej. ObservableCollection) y refrescar la lista de procesos en ejecución del ListBox mediante una tasa de refresco a tu elección...
Saludos