
GetWindowThreadProcessId,它根据窗口的句柄来获取进程和线程ID,VB原型如下
'Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
'参数:
'hwnd:目标窗口的句柄
'lpdwProcessId:一个接受返回进程ID的Long变量,
'顺便提一下,在我们调用API的时候,如果一个变量不是ByVal传递,则表示这个变量是用来接受返回值的(但也不是绝对的)
'返回值:
'窗口的线程ID
#include <tlhelp32h>
int GetProcessThreadList(DWORD th32ProcessID) //进程的ID
{
HANDLE hThreadSnap;
THREADENTRY32 th32;
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, th32ProcessID);
if (hThreadSnap == INVALID_HANDLE_VALUE)
{
return 1;
}
th32dwSize = sizeof(THREADENTRY32);
if (!Thread32First(hThreadSnap, &th32))
{
CloseHandle(hThreadSnap);
return 1;
}
do
{
if (th32th32OwnerProcessID == th32ProcessID)
{
printf("ThreadID: %ld\n", th32th32ThreadID); //显示找到的线程的ID
}
}while(Thread32Next(hThreadSnap, &th32));
CloseHandle(hThreadSnap);
return 0;
}
VC
获取进程线程数
#include
void
EnumProcess(void)
{
HANDLE
hProcessSnap;
HANDLE
hProcess;
PROCESSENTRY32
pe32;
DWORD
dwPriorityClass;
hProcessSnap
=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
0);
if
(hProcessSnap
==
INVALID_HANDLE_VALUE)
{
return;
}
pe32dwSize
=
sizeof(PROCESSENTRY32);
if
(!Process32First(hProcessSnap,
&pe32))
{
CloseHandle(hProcessSnap);
return;
}
do
{
//printf("%s",
pe32szExeFile);
//完整文件名
//printf("%d",
(int)pe32cntThreads);//线程数
}while(Process32Next(hProcessSnap,
&pe32));
CloseHandle(hProcessSnap);
}
如果要获取进程句柄
HANDLE
hProcessHandle;
hProcessHandle
=
OpenProcess(0x1F0FFF,
true,
ProcessID);//ProcessID进程ID
这个在控制台,Win32
SDK
,MFC
都可以用的,只不过
SDK
,MFC
输出就
不用
printf
了,只要把获取的内容赋给变量就行了
以上就是关于已知线程句柄,怎么得到Id全部的内容,包括:已知线程句柄,怎么得到Id、如何用WindowsAPI取得一个进程的所有线程句柄、用VC++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)