Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
.NET 4.x

Как при получение списка процессов убрать их повторения

24.10.2018, 20:51. Показов 1281. Ответов 17

Студворк — интернет-сервис помощи студентам
Получаю список процессов:
C#
1
2
3
4
5
6
7
8
9
static void Main(string[] args)
{
    Process[] procList = Process.GetProcesses();
    foreach(Process a in procList)
    {
        Console.WriteLine(a.ProcessName);
    }
    Console.ReadKey();
}
Но появляются много одинаковых процессов типа:
Code
1
2
3
4
5
6
7
8
svchost.exe
svchost.exe
svchost.exe
svchost.exe
opera.exe
opera.exe
opera.exe
otherprocesses.exe
Как убрать повторения?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2018, 20:51
Ответы с готовыми решениями:

Как убрать свой процесс из списка процессов в Диспетчере задач?
У меня один знакомый заниается тем, что ломает XP. Смешно, да? Он пытается убрать свой процесс из списка процессов в Диспетчере задач....

Получение списка процессов
Народ помогите Нужно написать скрипт для получения и записи в файл списка запущенных процессов(linux) Кто может поделитесь кодом

Получение списка процессов
Попытался скинуть в файл список всех процессов: Вариант 1: PROCESSENTRY32 PE32; HANDLE hSnapshot =...

17
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 21:01
Как обычно, с помощью LINQ. Мощная штука.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Diagnostics;
using System.Linq;
 
namespace Question2339722
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] procList = Process.GetProcesses();
            foreach (var item in procList.Select(e => e.ProcessName).Distinct().OrderBy(e => e))
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }
}
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,104
Записей в блоге: 2
24.10.2018, 21:01
Самый простой способ
C#
1
           IEnumerable<string> procNames = Process.GetProcesses().Select(proc => proc.ProcessName).Distinct();
1
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
24.10.2018, 21:03  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
Как обычно, с помощью LINQ. Мощная штука.
А без Linq можно?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 21:04
chaleureux, можно. Но зачем? Будет неприятная и длинная портянка.
0
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
24.10.2018, 21:07  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
Но зачем? Будет неприятная и длинная портянка.
Вариант с Linq полезен, но так же хотелось бы узнать можно ли обычным способом сделать это?!

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Самый простой способ
А через Linq с вашим способ ещё можно убрать из списка свой процесс?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 21:07
chaleureux, записывайте:
Array.Sort() - по возрастанию ваще на ура.
Много применять for со сравнениями элементов массива.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,104
Записей в блоге: 2
24.10.2018, 21:15
Цитата Сообщение от chaleureux Посмотреть сообщение
А через Linq с вашим способ ещё можно убрать из списка свой процесс?
Можно!

Добавлено через 2 минуты
C#
1
2
            string myProcName = "Имя моего процесса";
            IEnumerable<string> procNames = Process.GetProcesses().Select(proc => proc.ProcessName).Distinct().Where(proc => proc != myProcName);
1
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
24.10.2018, 21:16  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
Array.Sort() - по возрастанию ваще на ура.
Он только сортирует по именам же ? Или ещё что-то может?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 21:17
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Diagnostics;
using System.Linq;
 
namespace Question2339722
{
    class Program
    {
        static void Main(string[] args)
        {
            var name = Process.GetCurrentProcess().ProcessName;
            Process[] procList = Process.GetProcesses();
            foreach (var item in procList
                .Select(e => e.ProcessName)
                .Where (e=> e!= name)
                .Distinct()
                .OrderBy(e => e))
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }
}
Добавлено через 56 секунд
chaleureux, Array.Sort() по своим элементам сортирует. Что является элементом массива, то и сортирует.
1
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
24.10.2018, 21:18  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
string myProcName = "Имя моего процесса";
Я читал что лучше через id процесса это делать?! Типо что если 2 процесса будет с моим именем. Фиаско случится)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,104
Записей в блоге: 2
24.10.2018, 21:20
Цитата Сообщение от chaleureux Посмотреть сообщение
Я читал что лучше через id процесса это делать?! Типо что если 2 процесса будет с моим именем. Фиаско случится)
Можно и через ID.

Добавлено через 14 секунд
Минут через 10 -пока занят
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 21:21
chaleureux, а ваша программа svchost называется? Оригинальное имя нельзя применить? ))))
0
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
24.10.2018, 21:23  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
а ваша программа svchost называется? Оригинальное имя нельзя применить? ))))
аха, нет конечно, я же говорю это список найденных процессов, имя оригинальное)
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 21:24
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Diagnostics;
using System.Linq;
 
namespace Question2339722
{
    class Program
    {
        static void Main(string[] args)
        {
            var id = Process.GetCurrentProcess().Id;
            Process[] procList = Process.GetProcesses();
            foreach (var item in procList
                .Where(e => e.Id != id)
                .Select(e => e.ProcessName)
                .Distinct()
                .OrderBy(e => e))
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }
}
1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
24.10.2018, 21:25
Цитата Сообщение от chaleureux Посмотреть сообщение
Вариант с Linq полезен, но так же хотелось бы узнать можно ли обычным способом сделать это?!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    static void Main(string[] args)
    {
        var procList = Process.GetProcesses();
        var names = new HashSet<string>();
 
        foreach (var p in procList)
            names.Add(p.ProcessName);
 
        foreach (var name in names)
            Console.WriteLine(name);
 
        Console.ReadKey();
    }
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,104
Записей в блоге: 2
24.10.2018, 21:31
C#
1
2
            int myProcID= Process.GetCurrentProcess().Id;
            IEnumerable<string> procNames = Process.GetProcesses().Where(proc => proc.Id != myProcID).Select(proc => proc.ProcessName).Distinct();
Добавлено через 2 минуты
Вот такой вариант не знаю будет работать или нет, так как здесь используется сравнение ссылочных типов - это не всегда предсказуемая вещь.
C#
1
2
            Process myProc = Process.GetCurrentProcess();
            IEnumerable<string> procNames = Process.GetProcesses().Where(proc => proc != myProc).Select(proc => proc.ProcessName).Distinct();
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 21:38
Элд Хасп, по id достаточно же сравнивать.
---
Подправленный вариант от Storm23, с учётом вышеупомянутых пожеланий:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Diagnostics;
 
namespace Question2339722
{
    class Program
    {
        static void Main(string[] args)
        {
            var id = Process.GetCurrentProcess().Id;
            var procList = Process.GetProcesses();
            var names = new SortedSet<string>();
 
            foreach (var p in procList)
                if (p.Id != id)
                    names.Add(p.ProcessName);
 
            foreach (var name in names)
                Console.WriteLine(name);
 
            Console.ReadKey();
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.10.2018, 21:38
Помогаю со студенческими работами здесь

Получение списка процессов Windows
привет всем! надо написать программу которая управляет процессорами windows для каждого процесса выводит имя,директорию,занимаемая...

Получение списка запущенных процессов
Подскажите пожалуйста три вещи: 1. Как получить идентификатор потока (синим цветом - это я что-то пробовал сделать) 2. Как получить...

Получение списка путей процессов
Использую vs2010, win7 32. Вообщем,программа выводит список процессов. После получения handle процесса через OpenProcess с правами на...

получение списка процессов подключенных к приложению
Вопрос в названии темы. Как получить этот список и манипулировать этими процессами при необходимости?

Получение списка процессов и удаление ненужного
Подскажите пожалуйста как удалить самый тяжелый блокнот который запущен на вашем компьютере под Windows? С получением всего списка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru