Files
QoSManager/Views/ProcessSelectionWindow.xaml.cs

93 lines
2.6 KiB
C#

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<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 + ".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();
}
}
}