[C#] Перебор Процессов

Тема в разделе "Создания ПО", создана пользователем iDReeM!, 26 окт 2015.

  1. iDReeM!

    iDReeM! Active Member Команда форума

    Репутация:
    0
    Регистрация:
    5 дек 2013
    Сообщения:
    3.168
    Симпатии:
    3
    [hr]
    Снова Здарова![hr]Столкнулся с вопросом, решил предоставить вам пример решения, суть такова: писал инжектор для браузерной игры, но как известно, у большинства современных браузеров больше 1 процесса, следовательно нужно выбрать некий, который обычно, занимает больше всего ОЗУ, таким образом я пришел к следующему:​
    Код:
    int GetProcessID(string Name)
    
            {
    
                //Берем мосив процессов с неким именем
    
                Process[] procList = Process.GetProcessesByName(Name);
    
                //Берем мосив значений
    
                long[] MemorySizeOfProcess = new long[procList.Length];
    
                int PID = 0;
    
                //Пускаем цикл
    
                for (int i = 0; i < procList.Length; i++)
    
                {
    
                    //заносим в мосив значений размер памяти занимаемый каждым процессом
    
                    MemorySizeOfProcess[i] = procList[i].VirtualMemorySize64;
    
                }
    
                //Выводим максимальное значение в мосиве, да да) так просто))
    
                long MaxSize = MemorySizeOfProcess.Max();
    
                //Банально перебираем процессы
    
                foreach (Process Current in procList)
    
                    if (Current.VirtualMemorySize64 == MaxSize)
    
                        PID = Current.Id;
    
    
    
                return PID;
    
            }
    Так же стоит приметить, что браузерная игра загружает свои модули в нужный процесс, который может не во всех случаях занимать больше всего ОЗУ, следовательно я пришел к проверке по модулю таким образом:
    Код:
    int GetProcessID(string Name, string ModuleName)
    
            {
    
                Process[] procList = Process.GetProcessesByName(Name);
    
                int PID = 0;
    
    
    
                foreach(Process Current in procList)
    
                {
    
                    for (int i = 0; i < Current.Modules.Count; i++)
    
                        if (Current.Modules[i].ModuleName.ToLower() == ModuleName.ToLower())
    
                            PID = Current.Id;
    
                }
    
    
    
                return PID;
    
            }
    [hr]Приятного использования.

     
  2. Dirol))

    Dirol)) New Member

    Репутация:
    0
    Регистрация:
    16 мар 2014
    Сообщения:
    1.094
    Симпатии:
    0
    iDReeM!, дарова) ты как сюда попал?
     
  3. iDReeM!

    iDReeM! Active Member Команда форума

    Репутация:
    0
    Регистрация:
    5 дек 2013
    Сообщения:
    3.168
    Симпатии:
    3
    дарова, очень просто.
     
  4. iDReeM!

    iDReeM! Active Member Команда форума

    Репутация:
    0
    Регистрация:
    5 дек 2013
    Сообщения:
    3.168
    Симпатии:
    3
    iDReeM!,
     

Поделиться этой страницей