Задать вопрос
@valo1114
Python coder

Что нужно изменить?

Добрый день . В общем есть код:

int PIDByName(AnsiString AProcessName)
{

  HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PROCESSENTRY32 ProcessEntry;
  int pid;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(pHandle, &ProcessEntry);

  while (Loop)
	{
	  if (ProcessEntry.szExeFile == AProcessName)
	  {
				  pid = ProcessEntry.th32ProcessID;
				  CloseHandle(pHandle);
				  return pid;
	  }
	  Loop = Process32Next(pHandle, &ProcessEntry);
	}
	CloseHandle(pHandle);
	return 0;
}


Вызываю в таймере :
Edit2->Text = PIDByName("Project2.exe");

Он все корректно выводит , но если я запущу 2 одинаковые программы допустим 2 шт Project2.exe - то он выводит PID только одного , пока я не закрою первую программу .
Ребят подскажите пожалуйста , как можно сделать так , что бы он выводил в переменную допустим PID одного процесса , а так же последующих ? Наверно цикл как то по другому ?
  • Вопрос задан
  • 203 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
  • Нетология
    Разработчик на C++: Профессия + специализация + нейросети
    12 месяцев
    Далее
  • Skillbox
    Разработчик на C++
    7 месяцев
    Далее
  • Специалист.ру
    Программирование на языке C (Си)
    1 месяц
    Далее
  • Специалист.ру
    Программирование на Visual С++
    1 месяц
    Далее
  • XYZ School
    Геймплей-программирование
    5 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
BacCM
@BacCM
C++ почти с рождения
Тогда функция должна возвращать не одно значение а список. Какой-нибудь вектор или динамический массив билдера.

Тогда код
CloseHandle(pHandle);
return pid;

заменяешь на добавление pid в этот результирующий массив и всё. Соответственно и вызов функции изменится

Например:
int PIDByName(AnsiString AProcessName, std::vector<int>& Pids)
{
	Pids.clear();
	HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	PROCESSENTRY32 ProcessEntry;
	int pid;
	ProcessEntry.dwSize = sizeof(ProcessEntry);
	bool Loop = Process32First(pHandle, &ProcessEntry);

	while (Loop) {
		if (ProcessEntry.szExeFile == AProcessName)	{
			pid = ProcessEntry.th32ProcessID;
			Pids.push_back(pid);
		}
		Loop = Process32Next(pHandle, &ProcessEntry);
	}
	CloseHandle(pHandle);
	return Pids.size();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы