Last active
February 22, 2026 13:15
-
-
Save sunmeat/ef3d7b6f985a388a39a0c5f767c6f386 to your computer and use it in GitHub Desktop.
отримання списку процесів, інформація про процес, зміна пріоритету
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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