Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active February 22, 2026 13:15
Show Gist options
  • Select an option

  • Save sunmeat/ef3d7b6f985a388a39a0c5f767c6f386 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/ef3d7b6f985a388a39a0c5f767c6f386 to your computer and use it in GitHub Desktop.
отримання списку процесів, інформація про процес, зміна пріоритету
using System.Diagnostics;
using System.Security.Principal;
using System.Text;
class Program
{
static bool IsRunAsAdministrator()
{
var principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
static void RestartAsAdministrator()
{
try
{
// отримуємо шлях до поточного виконуваного файлу
string exePath = Process.GetCurrentProcess().MainModule.FileName;
// створюємо новий процес із правами адміністратора
var startInfo = new ProcessStartInfo
{
FileName = exePath,
Verb = "runas", // запуск від імені адміністратора
UseShellExecute = true
};
// запускаємо новий процес
Process.Start(startInfo);
}
catch (Exception ex)
{
Console.WriteLine($"Помилка при перезапуску програми з правами адміністратора: {ex.Message}");
}
}
static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
// перевіряємо, чи є в додатка права адміністратора
if (!IsRunAsAdministrator()) // якщо налаштовано файл маніфесту, то права є :)
{
RestartAsAdministrator();
return;
}
Console.WriteLine("Програма запущена з правами адміністратора.");
// отримання списку всіх процесів із сортуванням за назвою
var processes = Process.GetProcesses().OrderBy(p => p.ProcessName);
Console.WriteLine("Список усіх процесів:");
int count = 0;
foreach (Process process in processes)
{
Console.Write(++count + ". ");
// процесу з ID = 0 у Windows не існує, але в деяких випадках у списку може з’являтися "примарний" процес із цим ідентифікатором.
// це System Idle Process (процес простою системи). У диспетчері завдань Windows він показує, скільки процесорного часу не виконується.
// він не є справжнім процесом, але може з’являтися в списку при переборі Process.GetProcesses() у C#. Доступ до його даних заборонений, оскільки він належить ядру.
try
{
Console.WriteLine($". Процес ID: {process.Id}, Назва: {process.ProcessName}, " +
$"Заголовок вікна: {process.MainWindowTitle}, Час запуску: {process.StartTime}");
}
catch (Exception ex)
{
Console.WriteLine($"Помилка при отриманні інформації про процес {process.Id}: {ex.Message}");
}
Thread.Sleep(50);
}
Console.WriteLine("\nВведіть ID процесу, щоб отримати його деталі:");
int processId = int.Parse(Console.ReadLine());
try
{
Process selectedProcess = Process.GetProcessById(processId);
Console.WriteLine($"Деталі процесу {selectedProcess.Id}:");
Console.WriteLine($"Назва процесу: {selectedProcess.ProcessName}");
Console.WriteLine($"Заголовок вікна: {selectedProcess.MainWindowTitle}");
Console.WriteLine($"Час запуску: {selectedProcess.StartTime}");
int processCount = Process.GetProcessesByName(selectedProcess.ProcessName).Length;
Console.WriteLine($"Кількість запущених копій процесів із такою самою назвою: {processCount}");
}
catch (Exception ex)
{
Console.WriteLine($"Не вдалося знайти процес із ID {processId}. Помилка: {ex.Message}");
}
Console.WriteLine("\nВведіть ID процесу для зміни пріоритету:");
processId = int.Parse(Console.ReadLine());
try
{
var processToPriority = Process.GetProcessById(processId);
Console.WriteLine("Виберіть пріоритет для процесу:");
Console.WriteLine("1 - Високий");
Console.WriteLine("2 - Нормальний");
Console.WriteLine("3 - Низький");
var priorityChoice = Console.ReadKey().KeyChar;
Console.WriteLine();
switch (priorityChoice)
{
case '1':
processToPriority.PriorityClass = ProcessPriorityClass.High;
Console.WriteLine("Пріоритет встановлено на високий.");
break;
case '2':
processToPriority.PriorityClass = ProcessPriorityClass.Normal;
Console.WriteLine("Пріоритет встановлено на нормальний.");
break;
case '3':
processToPriority.PriorityClass = ProcessPriorityClass.Idle;
Console.WriteLine("Пріоритет встановлено на низький.");
break;
default:
Console.WriteLine("Невірний вибір.");
break;
}
}
catch (Exception ex)
{
Console.WriteLine($"Помилка при зміні пріоритету процесу з ID {processId}: {ex.Message}");
}
Console.WriteLine("Головний процес завершено.");
}
}
==================================================================================================================
app.manifest:
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e0e0d1a1-2279-4e50-9d27-bb1e2f1a7e45}" />
</application>
</compatibility>
</assembly>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment