[C#] Вк Игры - Перебор Процессов

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

  1. iDReeM!

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

    Репутация:
    0
    Регистрация:
    5 дек 2013
    Сообщения:
    3.168
    Симпатии:
    3
    [hr]
    Всем здарова![hr]Столкнулся с задачей, решил предоставить вам пример решения, суть такова: писал инжектор для браузерной игры, но как известно, у большинства современных браузеров больше 1 процесса, следовательно нужно выбрать некий, который обычно, занимает больше всего ОЗУ.[hr]​
    Таким образом я пришел к следующему:
    Код:
    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;
    
            }
    [hr]Так же вариант 2.[hr]Большинство браузерных игр загружают в процессы свои модули, проверка по модулю:
    Код:
    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. iDReeM!

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

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

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

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

    ITkhazeplov New Member

    Репутация:
    0
    Регистрация:
    24 янв 2015
    Сообщения:
    15
    Симпатии:
    0
    Я делаю так:

    Код:
    foreach (Process clsProcess in Process.GetProcesses())
    
                        {
    
                            if (clsProcess.ProcessName == "browser")
    
                            {
    
    
    
    
    
                                if (clsProcess.PeakPagedMemorySize > last)
    
                                {
    
                                    last = clsProcess.PeakPagedMemorySize;
    
                                    processID = clsProcess.Id;
    
                                }
    
    
    
    
    
                            }
    
    
     
  5. iDReeM!

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

    Репутация:
    0
    Регистрация:
    5 дек 2013
    Сообщения:
    3.168
    Симпатии:
    3
    ну, на премию ты явно не тянешь....
     
  6. ITkhazeplov

    ITkhazeplov New Member

    Репутация:
    0
    Регистрация:
    24 янв 2015
    Сообщения:
    15
    Симпатии:
    0
    Спасибо, но я знаю!
     

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