关于GetThreadId

  这个函数在Windows Server 2003之前的平台上是没有的,而我在写类库的时候偏偏需要这个功能,无奈的参考了MSDN和网络上的各种代码,勉强写出了一个能够使用的 GetThreadId。代码我就在这里贴一下吧。也可以到我的Google Code去下载。GetThreadId.7z

#include <windows.h>
#include <thlhelp32.h>

DWORD GetThreadID(HANDLE hThread,DWORD dwProcessId){
HANDLE hThreadSnap=INVALID_HANDLE_VALUE;
THREADENTRY32 te32;
#ifdef __GNUC__ //如果是MinGW的话,OpenThread这个函数在windows.h里是没有的,需要动态加载
typedef HANDLE (*OPENTHREAD)(DWORD,BOOL,DWORD);
OPENTHREAD OpenThread=::GetProcAddress(::GetModuleHandle("kernel32.dll"),"OpenThread");
#endif
   hThreadSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);//获取进程列表快照
if(hThreadSnap==INVALID_HANDLE_VALUE){
return -1;
}
te32.dwSize = sizeof(THREADENTRY32); //计算THREADENTRY32结构体的大小
if(::Thread32First(hThreadSnap,&te32)==FALSE){
return 1;
}
while(::Thread32Next(hThreadSnap,&te32)!=FALSE){//如果获取下一个线程成功
if(te32.th32OwnerProcessID==dwProcessId){//如果获取的进程ID与指定的进程ID相同
HANDLE hTempThread=OpenThread(THREAD_ALL_ACCESS,FALSE,te32.th32ThreadID);//根据结构体内的线程ID,打开线程得到句柄
if(hTempThread==hThread){//如果指定线程句柄与打开句柄相同
::CloseHandle(hTempThread);
::CloseHandle(hThreadSnap);
return te32.th32ThreadID;//返回句柄
}else{
::CloseHandle(hTempThread);
}
}
}
return 0;
}

转载于:https://www.cnblogs.com/mason961125/archive/2012/01/17/2325031.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值