【发布时间】:2010-12-23 00:03:37
【问题描述】:
我正在将此代码用于挂起进程。我在这里找到了它http://www.codeproject.com/KB/threads/pausep.aspx
BOOL SuspendResumeThreadList(DWORD dwOwnerPID, bool bResumeThread)
{
HANDLE hThreadSnap = NULL;
BOOL bRet = FALSE;
THREADENTRY32 te32 = {0};
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hThreadSnap == INVALID_HANDLE_VALUE)
return (FALSE);
te32.dwSize = sizeof(THREADENTRY32);
if (Thread32First(hThreadSnap, &te32))
{
do
{
if (te32.th32OwnerProcessID == dwOwnerPID)
{
HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID);
if (bResumeThread)
{
//cout << _T("Resuming Thread 0x") << cout.setf( ios_base::hex ) << te32.th32ThreadID << '\n';
ResumeThread(hThread);
}
else
{
//cout << _T("Suspending Thread 0x") << cout.setf( ios_base::hex ) << te32.th32ThreadID << '\n';
SuspendThread(hThread);
}
CloseHandle(hThread);
}
}
while (Thread32Next(hThreadSnap, &te32));
bRet = TRUE;
}
else
bRet = FALSE;
CloseHandle (hThreadSnap);
return (bRet);
}
现在我想要一种方法来确定进程是否暂停??? 请帮帮我。
【问题讨论】:
-
“进程被暂停”是什么意思?只有线程可以被挂起。一旦所有线程都被挂起,您就可以将进程定义为挂起 - 这也为您提供了一种检测它的方法。
-
谢谢,但是我如何检查线程是否被挂起???
-
没有记录在案的 API 可以做到这一点。如果您需要此类信息,您将不得不检查线程环境块,这是一个实现细节,可以在各种版本的 Windows 上更改。