名前だけでプロセスを終了する方法を検索して見つけました。
void KillProcessByName(TCHAR *szPName)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
PROCESSENTRY32 pEntry;
pEntry.dwSize = sizeof (pEntry);
BOOL hRes = Process32First(hSnapShot, &pEntry);
while(hRes)
{
if(!_tcsicmp(pEntry.szExeFile, szPName))
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
(DWORD) pEntry.th32ProcessID);
if (hProcess != NULL)
{
TerminateProcess(hProcess, 9);
CloseHandle(hProcess);
}
}
hRes = Process32Next(hSnapShot, &pEntry);
}
CloseHandle(hSnapShot);
}
しかし、PROCESSENTRY32 構造体に szLocation または sth というメンバーが見つかりません。名前が同じで場所が異なる 2 つのプロセスを区別する必要があります。