C++ 列出线程
这段代码它列出了所有进程和进程的所有线程,但我希望它只列出一个进程的线程的pid。。。 例子: explorer.exe pid=5454C++ 列出线程,c++,visual-c++,C++,Visual C++,这段代码它列出了所有进程和进程的所有线程,但我希望它只列出一个进程的线程的pid。。。 例子: explorer.exe pid=5454 通过pid,您希望他拥有线程ID和线程状态。您的代码实际上可以工作。只需要一点改变: HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (h != INVALID_HANDLE_VALUE) { THREADENTRY32 te; te.dwSize = sizeof(te
通过pid,您希望他拥有线程ID和线程状态。您的代码实际上可以工作。只需要一点改变:
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (h != INVALID_HANDLE_VALUE) {
THREADENTRY32 te;
te.dwSize = sizeof(te);
if (Thread32First(h, &te)) {
do {
if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) +
sizeof(te.th32OwnerProcessID)) {
HANDLE Handle = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE,
te.th32OwnerProcessID /* This is the PID, you can find one from windows task manager */
);
TCHAR Buffer[MAX_PATH];
wprintf(L"Process %u IdThred=%u\n",
te.th32OwnerProcessID, te.th32ThreadID);
}
te.dwSize = sizeof(te);
} while (Thread32Next(h, &te));
}
CloseHandle(h);
}
我不太确定你在问什么,但这可能会有帮助。如果你能对更改进行评论,不仅发布新代码,而且发布我想获取他不可见的信息的过程,这代码对他不起作用,那就太好了。还有别的办法吗?你能详细告诉我你需要什么吗?我不明白你的评论。很抱歉
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (h != INVALID_HANDLE_VALUE)
{
THREADENTRY32 te;
te.dwSize = sizeof(te);
if (Thread32First(h, &te))
{
do
{
//in THREADENTRY32 structure there is a member called th32OwnerProcessID
//you can check owner process of thread like this:
if (te.th32OwnerProcessID == 5454)
{
wprintf(L"Process %u IdThred=%u\n", te.th32OwnerProcessID, te.th32ThreadID);
}
} while (Thread32Next(h, &te));
}
CloseHandle(h);
}