using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using QoSManager.Models; namespace QoSManager.Views { public partial class ProcessSelectionWindow : Window { public List Processes { get; set; } public string SelectedProcess { get; set; } public ProcessSelectionWindow() { InitializeComponent(); LoadProcesses(); } private void LoadProcesses() { Processes = new List(); foreach (var process in Process.GetProcesses()) { try { var processInfo = new ProcessInfo { Id = process.Id, Name = (process.ProcessName + ".exe").ToLower(), 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.Name; DialogResult = true; Close(); } } private void CancelButton_Click(object sender, RoutedEventArgs e) { DialogResult = false; Close(); } private void TitleBar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) { DragMove(); } } private void MinimizeButton_Click(object sender, RoutedEventArgs e) { WindowState = WindowState.Minimized; } private void CloseButton_Click(object sender, RoutedEventArgs e) { DialogResult = false; Close(); } } }