指定一个目标进程,怎样得到目标进程内所有的线程信息啊?就是能够得到目标进程内所有线程的Id就好了,谢谢了
解决方案 »
- 一个关于局域网的问题。请各位大侠赐教。
- 求助:VC当文档中添加了一个控件,如何给这个控件关联一个变量。
- 在editbox中实现文本内容的翻滚
- 网页弹出的问题.
- 有谁知道windows本地磁盘属性的饼状图怎么实现的。
- (,)(,)请问大家:如何设置框架上菜单条背景颜色,如:文件(F) 编辑(E) 查看(V) 帮助(H) 所在背景颜色.3QQQ!!!
- 如何调用c++的数学函数库?
- UDP高手请进
- 如何用vc编程:终止另一个正在运行的程序。急急急!!!!谢谢。
- 如何判断一个点在CRgn路径附近?
- 关于用this指针传递参数(请教达人)
- ShellExecute 打开ie怎样控制ie窗口大小,和隐藏工具栏??
{
HANDLE hThreadSnap = NULL;
HANDLE hThread = NULL;
THREADENTRY32 ThreadEntry32;
__try
{
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if(hThreadSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot for thread Error: %d\n",GetLastError());
bResult = FALSE;
__leave;
}// OpenThread = (HANDLE(__stdcall *)(DWORD,BOOL,DWORD))GetProcAddress(GetModuleHandle("kernel32"),"OpenThread");
if(OpenThread == NULL)
{
printf("GetProcAddress for OpentThread Error: %d\n",GetLastError());
bResult = FALSE;
__leave;
}
ThreadEntry32.dwSize = sizeof(THREADENTRY32);
if(Thread32First(hThreadSnap, &ThreadEntry32))
{
printf("%-10s%-10s%-9s%15s\n\n","ThreadID","BasePrio","CreateTime","ProcessorTime");
do
{
if(ThreadEntry32.th32OwnerProcessID != dwProcessID)
{
continue;
}
printf("%-10d",ThreadEntry32.th32ThreadID);
printf("%8d",ThreadEntry32.tpBasePri);
hThread = OpenThread(THREAD_ALL_ACCESS,FALSE,ThreadEntry32.th32ThreadID);
if(hThread == NULL)
{
bResult = FALSE;
continue;
} if(!GetThreadTimes(hThread,&CreateTime,&ExitTime,&KernelTime,&UserTime))
{
bResult = FALSE;
}
else
{
FileTimeToSystemTime(&CreateTime,&SystemTime);
printf(" %.2d:%.2d:%.2d",(SystemTime.wHour+8)%24,SystemTime.wMinute,SystemTime.wSecond);
ProcessTime.dwHighDateTime = KernelTime.dwHighDateTime + UserTime.dwHighDateTime;
ProcessTime.dwLowDateTime = KernelTime.dwLowDateTime + UserTime.dwLowDateTime;
FileTimeToSystemTime(&ProcessTime,&SystemTime);
printf(" %.2d:%.2d:%.2d.%.4d ",SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond,SystemTime.wMilliseconds);
} printf("\n");
}while (Thread32Next(hThreadSnap, &ThreadEntry32));
printf("\nThread:\t %d\n",dwThread);
}
else
{
printf("Thread32First Error: %d\n",GetLastError());
bResult = FALSE;
__leave;
}
}
__finally
{
if(hThreadSnap != NULL)
{
CloseHandle (hThreadSnap);
}
}
}
能够获取线程ID,优先级,创建时间,进程时间4个属性。程序最好在VC7下面编译。
HANDLE hSnapshot = NULL;
THREADENTRY32 te32 = {0};
DWORD dwThrdCount = 0;hKernel = GetModuleHandle("KERNEL32.DLL");
if(hKernel) {
createtoolhelp32snapshot = (CREATESNAPSHOT)GetProcAddress(
hKernel, "CreateToolhelp32Snapshot"); thread32first = (THREADWALK)GetProcAddress(hKernel, "Thread32First"); thread32next = (THREADWALK)GetProcAddress(hKernel, "Thread32Next");
}if(!(thread32first && thread32next && createtoolhelp32snapshot))
return;
hSnapshot = createtoolhelp32snapshot(TH32CS_SNAPTHREAD, 0);
if(hSnapshot == (HANDLE)-1) return;te32.dwSize = sizeof(THREADENTRY32);
if(thread32first(hSnapshot, &te32)) {
do {
if(te32.th32OwnerProcessID==你想要枚舉線程的進程ID){
te32.th32ThreadID //得到指定進程ID的線程ID值
dwThrdCount++; //統計線程個數
} } while(thread32next(hSnapshot, &te32));
} else {
dwThrdCount = 0;
}CloseHandle(hSnapshot);
DWORD dwFlags,
DWORD th32ProcessID //在这里代入id
);