Статья Как получить PID по имени процесса

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
385
Что бы открыть ручку процесса и совершать чтение и запись в память нам нужно получить PID процесса
Простым языком сегодня я вам покажу как получить pid по имени процесса с помощью которого вы можете открыть полный доступ к процессу

Раньше я рассказал в теме как найти окно и получить ид процеса:

Сегодня мы будем находить ид именно по процессу, давайте приступим
не забудьте поставить многобайтовую кодировку в настройках проекта
функцию мы не вставляем в main() и не забудьте подключить #include <iostream> и #include <Windows.h> ну и так же #include "TlHelp32.h"

Спервам нам нужна сама функция которая будет находить процесс берем копируем и вставляем:
C++:
uintptr_t GetProcessID(const char* szProcessName)
{
    uintptr_t processID = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe32{};
        pe32.dwSize = sizeof(pe32);

        if (Process32First(hSnap, &pe32))
        {
            do
            {
                if (!_strcmpi(szProcessName, (const char*)pe32.szExeFile))
                {
                    processID = pe32.th32ProcessID;
                    break;
                }

            } while (Process32Next(hSnap, &pe32));
        }
    }

    if (hSnap)
        CloseHandle(hSnap);

    return processID;
}

Дальше нам желательно создать DWORD с переменной которой и будет отдавать отчет о нашей переменне
давайте создадим DWORD procID = 0; и собственно в методе main() воспользуемся ею

C++:
#include <iostream>
#include <Windows.h>
#include "TlHelp32.h"

DWORD procID = 0;

int main() {
    procID = GetProcessID("имя процесса.exe"); // имя процесса можно найти в диспетчере задач
    if (!procID) {
        // Если procID дает результат 0 и процесс не найден выполняем код который вам нужен
    }
    // в случае успеха продолжаем код
}
 

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
385
Вместо поиска окна вы можете получить PID процесса по названию процесса это намного проще и множества читов используют данную функцию
если вам что то не понятно пишите в личку либа сюда в тему, разберем)
 

Nowane

Следопыт
Сообщения
71
Реакции
25
Я так понял PID процесса можно посмотреть в любом диспетчере, в том же Process Hackerе или любой другой программе. Как пример? Номер PID процесса csrss.exe - 572? Всё правильно?
 

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
385
Я так понял PID процесса можно посмотреть в любом диспетчере, в том же Process Hackerе или любой другой программе. Как пример? Номер PID процесса Registry 108? Всё правильно?
все верно, но при запуске любой программы он каждый раз меняется
 

Garemch1k_

Пользователь
Сообщения
14
Реакции
1
Дарвин, создал (спастил) инжектор Setwinhook , но для инжекта нужен клас или имя окна . Как я могу узнать имя окна и клас?
 

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
385
Дарвин, создал (спастил) инжектор Setwinhook , но для инжекта нужен клас или имя окна . Как я могу узнать имя окна и клас?
WinLister - бесплатная программа которая может выдать тебе класс окна, имя окна это имя окна, если имени окна нету то используй поиск по ид процессу либо классу, когда дочерние есть классы то уже лучше использовать получение pid процесса
 

Garemch1k_

Пользователь
Сообщения
14
Реакции
1
WinLister - бесплатная программа которая может выдать тебе класс окна, имя окна это имя окна, если имени окна нету то используй поиск по ид процессу либо классу, когда дочерние есть классы то уже лучше использовать получение pid процесса
Нашёл клас пабга, имя окна , не инжектит . Инжектор тестил на других играх, ворк.
 

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
385
Нашёл клас пабга, имя окна , не инжектит . Инжектор тестил на других играх, ворк.
Проверь на наличие открытие процесса и Handle
C++:
if (!handle || handle == INVALID_HANDLE_VALUE) {

std::cout << "Handle not found";

}

А также проверь окно найдено оно или нет
Пабг защищенный процесс анти-читом на драйверном уровне, поэтому инжектор может не работать
тебе нужен kernel injector
 

luckish

Исследователь
Сообщения
36
Реакции
4
обязательно воспользуюсь
 

$1and1

Активный
Сообщения
275
Реакции
41
Что бы открыть ручку процесса и совершать чтение и запись в память нам нужно получить PID процесса
Простым языком сегодня я вам покажу как получить pid по имени процесса с помощью которого вы можете открыть полный доступ к процессу

Раньше я рассказал в теме как найти окно и получить ид процеса:

Сегодня мы будем находить ид именно по процессу, давайте приступим
не забудьте поставить многобайтовую кодировку в настройках проекта
функцию мы не вставляем в main() и не забудьте подключить #include <iostream> и #include <Windows.h> ну и так же #include "TlHelp32.h"

Спервам нам нужна сама функция которая будет находить процесс берем копируем и вставляем:
C++:
uintptr_t GetProcessID(const char* szProcessName)
{
    uintptr_t processID = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe32{};
        pe32.dwSize = sizeof(pe32);

        if (Process32First(hSnap, &pe32))
        {
            do
            {
                if (!_strcmpi(szProcessName, (const char*)pe32.szExeFile))
                {
                    processID = pe32.th32ProcessID;
                    break;
                }

            } while (Process32Next(hSnap, &pe32));
        }
    }

    if (hSnap)
        CloseHandle(hSnap);

    return processID;
}

Дальше нам желательно создать DWORD с переменной которой и будет отдавать отчет о нашей переменне
давайте создадим DWORD procID = 0; и собственно в методе main() воспользуемся ею

C++:
#include <iostream>
#include <Windows.h>
#include "TlHelp32.h"

DWORD procID = 0;

int main() {
    procID = GetProcessID("имя процесса.exe"); // имя процесса можно найти в диспетчере задач
    if (!procID) {
        // Если procID дает результат 0 и процесс не найден выполняем код который вам нужен
    }
    // в случае успеха продолжаем код
}
Я делаю так
C++:
DWORD pid=0;
HWND hwd = FindWindow(0, L"Counter-Strike");
GetWindowThreadProcessId(hwd, &pid);
if(!hwd){
    std::cout<<"error";
    std::system("pause");
    exit(0x01);
}
 
Верх Низ