请问如何得知Thread或Process的详细信息?

FoolBoy 2000-03-20 05:06:00
请问如何得知Thread或Process的详细信息,如Process的标题或执行文件名,进程地址范围等;Thread或Process的ID已知。
...全文
220 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxz 2000-03-29
  • 打赏
  • 举报
回复
// 以下是我用的函数, 参考参考吧
void __fastcall TTaskTree::ShowThreadMsg(DWORD dwId)
{
char Hex[14];
AnsiString Tmp;
// 进程ID
intToHex((int)dwId,Hex);
_ProcessID->Caption=Hex;
// 线程
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnapshot==(HANDLE)-1)return;
PROCESSENTRY32 pe;
THREADENTRY32 te;
pe.dwSize=sizeof(pe);
TListItem *ListItem;
lvThread->Items->Clear();
cboThread->Items->Clear();
for(int i=Process32First(hSnapshot,&pe);i;i=Process32Next(hSnapshot,&pe))
{
if(dwId==pe.th32ProcessID)
{
// 基本优先权
_BasePri->Caption=IntToStr((int)pe.pcPriClassBase);
// 创建线程数
_Threads->Caption=IntToStr(pe.cntThreads);

HANDLE hSnapThread=CreateToolhelp32Snapshot
(TH32CS_SNAPTHREAD,pe.th32ProcessID);
if(hSnapThread!=(HANDLE)-1)
{
te.dwSize=sizeof(THREADENTRY32);
if(Thread32First(hSnapThread,&te))
{
do{
if(te.th32OwnerProcessID==pe.th32ProcessID)
{
ListItem=lvThread->Items->Add();
// 线程ID
intToHex((int)te.th32ThreadID,Hex);
ListItem->Caption = Hex;
cboThread->Items->Add(Hex);
// 线程优先权
Tmp=IntToStr((int)te.tpBasePri);
ListItem->SubItems->Add(Tmp);
// Tmp=GetPriText((int)te.tpBasePri);
// ListItem->SubItems->Add(Tmp);
}
}while(Thread32Next(hSnapThread,&te));
}
}
CloseHandle(hSnapThread);
break;
}
}
CloseHandle(hSnapshot);
}
//---------------------------------------------------------------------------
FoolBoy 2000-03-23
  • 打赏
  • 举报
回复
我去看了,但auto.zip下载后不可用。
sirius 2000-03-22
  • 打赏
  • 举报
回复
参考Tool Help Functions
先要创建snapshot....
到我的网站上找吧,http://cppsource.yeah.net
源代码auto.zip里面的core.h里面有
把系统所以prosess,thread,window全部信息找到的函数

FoolBoy 2000-03-22
  • 打赏
  • 举报
回复
谢谢NoBug。但不知有没有能不能Process32First等枚举的方法,比如向该Proccess发送消息,但我不知应发送什么消息?
NoBug 2000-03-20
  • 打赏
  • 举报
回复
首先,使用OpenProcess获得进程句柄,如果是NT,可使用PSAPI的GetModuleFilenameEx函数来获得进程的执行名,对于Win9x则可使用Toolhelp32中的Process32First,Process32Next对进程进行枚举,对进程ID进行比较,则可获得对应进程的相应信息。对于进程的地址范围,可使用GetSystemInfo来获得,如果你指的进程地址范围是说在进程地址空间中虚拟页状态,则可使用VirtualQueryEx来获得。

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧