0

名前だけでプロセスを終了する方法を検索して見つけました。

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 つのプロセスを区別する必要があります。

4

1 に答える 1

0

szExeFileから簡単に読み取ることができますPROCESSENTRY32

またはGetModuleFileNameEx、プロセス ハンドルに関連付けられた実行可能ファイルへのフル パスを返すために使用できます。

于 2012-11-20T18:17:51.577 に答える