#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 知道路径和进程如何获取窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)