已知线程句柄,怎么得到Id

已知线程句柄,怎么得到Id,第1张

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++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9533204.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存