获取线程ID

翻回之前写的HOOK 程序,发现以前的挂钩线程ID部分有问题。。因而网上找各类获取线程ID的方法,把找到的几种写下来方便之后用浏览器


1.经过进程映射名称获取主线程ID(进程映射名应为全大写,如谷歌浏览器的进程名:CHROME.EXE)函数

DWORD WINAPI GetThreadIDByName(LPCTSTR lpFilename)
{
	DWORD dwThreadID = 0;
	PROCESSENTRY32 pe32;
	HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if(hProcessSnap == INVALID_HANDLE_VALUE) 
		return 0;
	if(!Process32First(hProcessSnap,&pe32))
	{
		do
		{
			_strupr(pe32.szExeFile);
			if(!strcmp(pe32.szExeFile,lpFilename))
			{
				//遍历线程查找对应ID
				HANDLE hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
				THREADENTRY32 te32 = {sizeof(te32)};
				if(::Thread32First(hThreadSnap,&te32))
				{
					do
					{
						if(te32.th32OwnerProcessID == pe32.th32ProcessID)
						{
							dwThreadID = te32.th32ThreadID;
							break;
						}
					}
					while(::Thread32Next(hThreadSnap,&te32));
				}
				CloseHandle(hThreadSnap);
				break;
			}
		}
		while(Process32Next(hProcessSnap,&pe32));
	}
	CloseHandle(hProcessSnap);
	return dwThreadID;
}


2.GetWindowThreadProcessId.这个函数用于获取建立某窗口的线程,进程ID

DWORD GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId);spa

hWnd 是目标窗口的句柄线程

lpdwProcessId 是用来存放进程ID的地址code


3.GetCurrentThreadId.获取当前线程ID进程

返回值就是线程IDclass


4.GetThreadId.根据线程句柄获取线程ID遍历

DWORD WINAPI GetThreadId(HANDLE hThread);程序

hThread 就是线程句柄方法

返回值就是线程ID



暂时只找到这么多,之后找到再补上