bool KillProcess(DWORD dwPid)
{
//1.打开进程
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwPid);
if (hProcess == INVALID_HANDLE_VALUE)
returnfalse;
//2.结束进程
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
return true;
}
bool GetProcessList()
{
HANDLE hProcessSnap; //进程快照句柄
HANDLE hPorcess; //进程句柄
PROCESSENTRY32 stcPe32 = { 0 };//进程快照信息
stcPe32.dwSize = sizeof(PROCESSENTRY32 );
//1.创建一个进程相关的快照句柄
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS , 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
returnfalse;
//2. 通过进程快照句柄获取第一个进程信息
if (!Process32First (hProcessSnap, &stcPe32))
{
CloseHandle (hProcessSnap);
returnfalse;
}
//3.循环遍历进程信息
do
{
ProcessInfo stcInfo = { 0 };
//3.1 获取进程映像路径
wcscpy_s(stcInfo.szProcess, stcPe32.szExeFile);
//3.2 获取优先级信息
hPorcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, stcPe32.th32ProcessID);
if (hPorcess)
{
stcInfo.dwPriorityClass = GetPriorityClass(hPorcess);//获取进程优先级
CloseHandle (hPorcess); //关闭句柄
}
//3.3 获取进程的其它相关信息
stcInfo.dwPid = stcPe32.th32ProcessID;
stcInfo.dwThreadCount = stcPe32.cntThreads;
stcInfo.dwParentProcess = stcPe32.th32ParentProcessID;
//3.4 将获取到的相关信息保存到向量中
m_vecProcessList.push_back(stcInfo);
} while (Process32Next(hProcessSnap, &stcPe32));
//4. 关闭句柄退出函数
CloseHandle(hProcessSnap);
return true;
}
//遍历模块信息
bool GetModuleList(DWORDdwPid)
{
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
MODULE ENTRY32me32 = { sizeof(MODULEENTRY32) };
//1.创建一个模块相关的快照句柄
hModuleSnap = CreateToolhelp32Snapshot(
TH32CS_SNAPMODULE,//指定快照的类型
dwPid //指定进程
);
if (hModuleSnap == INVALID_HANDLE_VALUE)
returnfalse;
//2.通过模块快照句柄获取第一个模块信息
if (!Module32First(hModuleSnap, &me32))
{
CloseHandle(hModuleSnap);
returnfalse;
}
//3.循环获取模块信息
m_vecModuleList.clear();
do
{
m_vecModuleList.push_back(me32);
} while (Module32Next(hModuleSnap,&me32));
//4.关闭句柄并退出函数
CloseHandle(hModuleSnap);
return true;
}
快照中进程信息结构体
typedef struct tagPROCESSENTRY3
{
DWORD dwSize; //该结构的大小
DWORD cntUsage; //进程的引用计数,一般为NULL
DWORD th32ProcessID; //进程PID
ULONG_PTR th32DefaultHeapID; //进程默认堆ID
DWORD th32ModuleID; //进程模块ID
DWORD cntThreads; //进程中线程的数量
DWORD th32ParentProcessID;//父进程ID
LONG pcPriClassBase; //进程创建的线程的基本优先级
DWORD dwFlags; //内部保留使用
TCHAR szExeFile[MAX_PATH];//进程名
} PROCESSENTRY32, *PPROCESSENTRY32;
typedef struct tagMODULEENTRY32
{
DWORD dwSize; //结构体大小
DWORD th32ModuleID; //模块ID
DWORD th32ProcessID; //模块所属进程ID
DWORD GlblcntUsage; //无意义
DWORD ProccntUsage; //无意义
BYTE *modBaseAddr; //模块基址
DWORD modBaseSize; //模块内存大小
HMODULE hModule; //模块句柄
TCHAR szModule[MAX_MODULE_NAME32 + 1]; //模块名
TCHAR szExePath[MAX_PATH]; //模块路径
} MODULEENTRY32, *PMODULEENTRY32;