@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 одного процесса , а так же последующих ? Наверно цикл как то по другому ?
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 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();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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