#include <iostream>#include <windows.h>#include <TlHelp32.h>// 在线程内核对象对应的结构体中,有一个挂起计数,只有当挂起计数为 0 的时候,线程才会被调度(执行),// 可以使用 ResumeThread 让挂起计数 -1,使用 Susepend 函数让挂起计数 +1。// 查找指定窗口对应的进程idDWORD FindProcessId(LPCWSTR WindowName){ HWND hWnd = FindWindow(NULL, WindowName); if (hWnd != NULL) { DWORD ProcessId = 0; GetWindowThreadProcessId(hWnd, &ProcessId); return ProcessId; } return -1;}int main(){ // 1. 使用函数创建线程快照,此时参数二没有意义,无论填写什么,遍历到的都是所有线程 HANDLE Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); // 2. 创建一个结构体用于保存遍历到的所有线程信息 THREADENTRY32 ThreadInfo{ sizeof(THREADENTRY32) }; // 3. 尝试从快照中获取到保存的第一个线程的信息 if (Thread32First(Snapshot, &ThreadInfo)) { DWORD Pid = FindProcessId(L"无标题 - 画图"); do { // 4. 由于遍历到的是所有的线程,所以我们需要判断 if (ThreadInfo.th32OwnerProcessID == Pid) { // 打开目标进程的每一个线程,尝试将这个线程挂起 HANDLE Thread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, ThreadInfo.th32ThreadID); if (Thread) { // SuspendThread(Thread); SuspendThread(Thread); ResumeThread(Thread); CloseHandle(Thread); } } } while (Thread32Next(Snapshot, &ThreadInfo)); } return 0;}