Тогда функция должна возвращать не одно значение а список. Какой-нибудь вектор или динамический массив билдера.
Тогда код
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();
}