如何用WindowsAPI取得一个进程的所有线程句柄

如何用WindowsAPI取得一个进程的所有线程句柄,第1张

#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;

}

怎么这么乱啊,你那个是中文编程吧你那些我真看不懂~!

HANDLE hProcessSnap= ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, nPID);//获取快照句柄

if(hProcessSnap == INVALID_HANDLE_VALUE)//如果获取失败返回

return;

PROCESSENTRY32 pe32 = { sizeof(pe32) };//快照结构并给予大小

if(::Process32First(hProcessSnap, &pe32))

{

do

{

if(pe32th32ProcessID == PID)//如果进程ID等于你想寻找的进程ID则返回主线程ID

{

return pe32th32ThreadID ;

}

}while(::Process32Next(hProcessSnap, &pe32));

}//否则循环判断尾

::CloseHandle(hProcessSnap);

纠正你一下,得知路径是获取不了目标进程的句柄的。通过API函数 OPENPROCESS 可以获取进程的句柄,不过要注意的是,进程句柄不一定是窗口的句柄,好好理解这句话。HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pID ); hProcess //进程句柄pID //进程ID 如果你想取某个窗口句柄的话,最好不要通过进程ID转换的方式,这会让你离目标越来越远。

首先你要知道 你要找的是进程的句柄。句柄是 *** 作系统 *** 作的对象,任何一个对象比如一个textbox 也有他的句柄,不一定只要窗口才有句柄。现在你要找到进程的句柄,貌似用C#的话必须要用API 可以用Delphi 试试 这样比较方便 比如 FindWindow 我没有尝试用 这个函数来找 隐藏窗体的句柄 但是 一般 找窗体都没问题的。

以上就是关于如何用WindowsAPI取得一个进程的所有线程句柄全部的内容,包括:如何用WindowsAPI取得一个进程的所有线程句柄、知道进程id取主线程ID、delphi 知道路径和进程如何获取窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/10162734.html

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

发表评论

登录后才能评论

评论列表(0条)

保存