翻回之前写的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; }
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
暂时只找到这么多,之后找到再补上