进程是由线程组成,启动是的第一个线程为主线程。
对于Windows来说,不存在暂停或恢复进程的概念,因为进程从来不会被安排获得cpu时间。
但是我们可以创建一个函数,用来挂起或者恢复进程中的全部线程,这样就能挂起或者恢复一个进程了。
在进程外获取该进程的线程。
方法:
一、获取目标窗口句柄和进程PID
HWND hCalc = ::FindWindow(NULL, "第几课作业 Hardware断点");
GetWindowThreadProcessId(hCalc, &th32ProcessID);
二、通过CreateToolhelpSnapshot函数创建一线程快照;
HANDLE hSnapThread = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, th32ProcessID);
三、使用Thread32First以及Thread32Next函数遍历系统中所有线程,根据比较线程父进程ID(th32ProcessID)来过滤指定进程的所有线程;
if (INVALID_HANDLE_VALUE != hSnapThread)
{
THREADENTRY32 te32 = {sizeof(te32)};
if (Thread32First(hSnapThread, &te32))
{
do {
if (th32ProcessID == te32.th32OwnerProcessID)
{
//操作
}
}while (Thread32Next(hSnapThread, &te32));
}}
四、关闭线程快照句柄.
CloseHandle(hSnapThread);
时间: 2024-11-08 07:46:20