73 lines
2.1 KiB
C#
73 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using QoSManager.Models;
|
|
|
|
namespace QoSManager.Views
|
|
{
|
|
public partial class ProcessSelectionWindow : Window
|
|
{
|
|
public List<ProcessInfo> Processes { get; set; }
|
|
public string SelectedProcess { get; set; }
|
|
|
|
public ProcessSelectionWindow()
|
|
{
|
|
InitializeComponent();
|
|
LoadProcesses();
|
|
}
|
|
|
|
private void LoadProcesses()
|
|
{
|
|
Processes = new List<ProcessInfo>();
|
|
|
|
foreach (var process in Process.GetProcesses())
|
|
{
|
|
try
|
|
{
|
|
var processInfo = new ProcessInfo
|
|
{
|
|
Id = process.Id,
|
|
Name = process.ProcessName,
|
|
Path = process.MainModule?.FileName ?? "Unknown"
|
|
};
|
|
|
|
Processes.Add(processInfo);
|
|
}
|
|
catch
|
|
{
|
|
// Skip processes we can't access
|
|
}
|
|
}
|
|
|
|
// Remove duplicates by path (keep only unique processes)
|
|
Processes = Processes
|
|
.GroupBy(p => p.Path)
|
|
.Select(g => g.First())
|
|
.ToList();
|
|
|
|
// Sort processes alphabetically by name
|
|
Processes = Processes.OrderBy(p => p.Name, StringComparer.OrdinalIgnoreCase).ToList();
|
|
ProcessesDataGrid.ItemsSource = Processes;
|
|
}
|
|
|
|
private void SelectButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (ProcessesDataGrid.SelectedItem is ProcessInfo selectedProcess)
|
|
{
|
|
SelectedProcess = selectedProcess.Path;
|
|
DialogResult = true;
|
|
Close();
|
|
}
|
|
}
|
|
|
|
private void CancelButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
DialogResult = false;
|
|
Close();
|
|
}
|
|
}
|
|
}
|