Загрузка данных


Добавьте на форму элемент ListView (назовите его listViewProcesses).В свойствах listViewProcesses измените View на Details.Добавьте элемент CheckBox (назовите его checkBoxHideSystem) с текстом «Скрыть системные процессы».Добавьте элемент Button (назовите его btnKill) с текстом «Завершить процесс».Дважды кликните по форме, по кнопке и по чекбоксу, чтобы создать обработчики событий, и вставьте код ниже.Код формы (Form1.cs):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitListView();
            RefreshProcesses();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void listViewProcesses_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
        private void checkBoxHideSystem_CheckedChanged(object sender, EventArgs e)
        {
            RefreshProcesses();
        }

        private void btnKill_Click(object sender, EventArgs e)
        {
            if (listViewProcesses.SelectedItems.Count == 0) return;

            var selectedItem = listViewProcesses.SelectedItems[0];
            int pid = int.Parse(selectedItem.Text);
            string pName = selectedItem.SubItems[1].Text;

            if (pid < 100)
            {
                MessageBox.Show("Критический системный процесс. Завершение запрещено!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try
            {
                Process proc = Process.GetProcessById(pid);

                if (proc.BasePriority > 8)
                {
                    DialogResult res = MessageBox.Show($"Процесс \"{pName}\" имеет высокий приоритет. Завершение может привести к нестабильности системы. Продолжить?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    if (res == DialogResult.No) return;
                }

                proc.Kill();
                RefreshProcesses();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Не удалось завершить процесс: {ex.Message}", "Ошибка");
            }
        }

        private void InitListView()
        {
            listViewProcesses.Columns.Clear();
            listViewProcesses.Columns.Add("PID", 60);
            listViewProcesses.Columns.Add("Имя", 120);
            listViewProcesses.Columns.Add("Память (МБ)", 90);
            listViewProcesses.Columns.Add("Приоритет", 90);
            listViewProcesses.Columns.Add("Время процессора", 120);
            listViewProcesses.Columns.Add("Потоки", 70);
        }

        private void RefreshProcesses()
        {
            listViewProcesses.Items.Clear();
            Process[] processes = Process.GetProcesses();
            string currentUser = Environment.UserName;

            foreach (Process p in processes)
            {
                try
                {
                    string pUser = GetProcessUser(p);

                    if (checkBoxHideSystem.Checked && pUser != currentUser)
                    {
                        continue;
                    }

                    long memMb = p.WorkingSet64 / (1024 * 1024);
                    string priorityStr = GetPriorityStr(p.BasePriority);

                    string cpuTime = "Н/Д";
                    try { cpuTime = p.TotalProcessorTime.ToString(@"hh\:mm\:ss"); } catch { }

                    ListViewItem item = new ListViewItem(p.Id.ToString());
                    item.SubItems.Add(p.ProcessName);
                    item.SubItems.Add(memMb.ToString());
                    item.SubItems.Add(priorityStr);
                    item.SubItems.Add(cpuTime);
                    item.SubItems.Add(p.Threads.Count.ToString());

                    listViewProcesses.Items.Add(item);
                }
                catch
                {
                    if (checkBoxHideSystem.Checked) continue;

                    ListViewItem item = new ListViewItem(p.Id.ToString());
                    item.SubItems.Add(p.ProcessName);
                    item.SubItems.Add("Н/Д");
                    item.SubItems.Add("Н/Д");
                    item.SubItems.Add("Н/Д");
                    item.SubItems.Add("Н/Д");
                    listViewProcesses.Items.Add(item);
                }
            }

            foreach (ColumnHeader col in listViewProcesses.Columns)
            {
                col.Width = -2;
            }
        }

        private string GetPriorityStr(int priority)
        {
            if (priority <= 4) return "Idle";
            if (priority <= 8) return "Normal";
            if (priority <= 10) return "BelowNormal";
            if (priority <= 13) return "AboveNormal";
            if (priority <= 15) return "High";
            return "Realtime";
        }

        private string GetProcessUser(Process p)
        {
            try
            {
                return p.StartInfo.EnvironmentVariables["USERNAME"] ?? "";
            }
            catch
            {
                return "SYSTEM";
            }
        }
    }
}