[转] 获取进程的主线程ID
2013-05-16 17:07
295 查看
#ifndef MAKEULONGLONG #define MAKEULONGLONG(ldw, hdw) ((ULONGLONG(hdw) << 32) | ((ldw) & 0xFFFFFFFF)) #endif #ifndef MAXULONGLONG #define MAXULONGLONG ((ULONGLONG)~((ULONGLONG)0)) #endif bool CloseProcessMainThread(DWORD dwProcID) { DWORD dwMainThreadID = 0; ULONGLONG ullMinCreateTime = MAXULONGLONG; HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (hThreadSnap != INVALID_HANDLE_VALUE) { THREADENTRY32 th32; th32.dwSize = sizeof(THREADENTRY32); BOOL bOK = TRUE; for (bOK = Thread32First(hThreadSnap, &th32); bOK; bOK = Thread32Next(hThreadSnap, &th32)) { if (th32.th32OwnerProcessID == dwProcID) { HANDLE hThread = OpenThread(THREAD_QUERY_INFORMATION, TRUE, th32.th32ThreadID); if (hThread) { FILETIME afTimes[4] = {0}; if (GetThreadTimes(hThread, &afTimes[0], &afTimes[1], &afTimes[2], &afTimes[3])) { ULONGLONG ullTest = MAKEULONGLONG(afTimes[0].dwLowDateTime, afTimes[0].dwHighDateTime); if (ullTest && ullTest < ullMinCreateTime) { ullMinCreateTime = ullTest; dwMainThreadID = th32.th32ThreadID; // let it be main... :) } } CloseHandle(hThread); } } } #ifndef UNDER_CE CloseHandle(hThreadSnap); #else CloseToolhelp32Snapshot(hThreadSnap); #endif } if (dwMainThreadID) { PostThreadMessage(dwMainThreadID, WM_QUIT, 0, 0); // close your eyes... } return (0 != dwMainThreadID); }
http://www.codeproject.com/Questions/78801/How-to-get-the-main-thread-ID-of-a-process-known-b[/code]
相关文章推荐
- 利用进程ID获取主线程ID
- 利用进程ID获取主线程ID
- 根据进程ID获取其主线程ID
- C#获取当前活动窗口进程、进程ID、程序路径
- Java获取当前进程ID以及所有Java进程的进程ID
- Linux有问必答:如何在脚本中获取进程ID(PID)
- WIN API-VFP获取第三方窗体的控件信息(句柄,窗口ID,进程ID,类名,标题
- [Win32]获取QQ密码输入框所属进程ID
- 如何通过进程ID获取进程名
- WIN32开发:如何获取父进程的ID
- 进程相关(进程Id获取主窗口)
- Delphi获取系统进程和进程ID,Listview实现
- shell脚本获取进程ID并杀死
- 根据关键词获取进程ID然后杀掉进程
- linux通过进程名获取进程id
- 跨平台获取java进程id(Process ID in Java)
- 根据进程ID获取进程路径
- 获取iOS设备上所有的进程名字,以及进程的ID,
- 通过进程ID获取基地址
- 获取当前进程/线程的ID、句柄和内核地址