如何通过exe名,来查找ProcessId和他的主线程Id

zych72 2003-07-16 07:08:07

在线等候,多谢
...全文
139 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zych72 2003-07-17
  • 打赏
  • 举报
回复
感谢各位大虾,区区100分有点少,实在不好意思
masterz 2003-07-16
  • 打赏
  • 举报
回复
EnumWindows
GetWindowThreadProcessId
zych72 2003-07-16
  • 打赏
  • 举报
回复
实际我的问题也很简单,就是哪个线程下面有窗口,我就认为它是主线程
zych72 2003-07-16
  • 打赏
  • 举报
回复
masterz(MS MVP) :我怎么判断哪个线程是主线程呢?判断条件是什么?

谢谢大家,现在只差这一点了
zych72 2003-07-16
  • 打赏
  • 举报
回复
我想进一步知道如何找到进程的 主线程,谢谢
wwwqqq 2003-07-16
  • 打赏
  • 举报
回复
先枚举所有进程,然后跟根进程取得EXE名,相比较!
masterz 2003-07-16
  • 打赏
  • 举报
回复
To get thread:

std::deque<DWORD> dqThreads;
HANDLE hThreadSnap = NULL;
BOOL bRet = FALSE;
THREAD_INFORMATION_EX tie;
DWORD dwThisThread = ::GetCurrentThreadId(); // used for not killing ourself

// Take a snapshot of all threads currently in the system.
DWORD dwProcessID=GetCurrentProcessId();
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, dwProcessID);
if (hThreadSnap == INVALID_HANDLE_VALUE)
return false;
// Fill in the size of the structure before using it.
tie.te32.dwSize = sizeof(THREADENTRY32);
// Walk the thread snapshot to find all threads of the process.
// If the thread belongs to the process, add its information
// to the display list.
if (Thread32First(hThreadSnap, &tie.te32))
{
do
{
if (tie.te32.th32OwnerProcessID == dwProcessID)
{
dqThreads.push_back(tie.te32.th32ThreadID);
ZeroMemory(&tie, sizeof(THREAD_INFORMATION_EX));
tie.te32.dwSize = sizeof(THREADENTRY32);
}
}
while (Thread32Next(hThreadSnap, &tie.te32));
bRet = TRUE;
}
//else
// return false; // could not walk the list of threads
CloseHandle (hThreadSnap);
zych72 2003-07-16
  • 打赏
  • 举报
回复
那么能根据进程ID 查找其主线程ID 吗?
NowCan 2003-07-16
  • 打赏
  • 举报
回复

DWORD GetProcessId(char *targetFile )//获取进程的ID
{
DWORD Pid=-1;
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//创建系统快照
PROCESSENTRY32 lPrs;
ZeroMemory(&lPrs,sizeof(lPrs));
lPrs.dwSize=sizeof(lPrs);
Process32First(hSnap,&lPrs);//取得系统快照里第一个进程信息
if (strstr(targetFile,lPrs.szExeFile))//判断进程信息是否是targetFile
{
Pid=lPrs.th32ProcessID;
return Pid;
}

while(1)
{
ZeroMemory(&lPrs,sizeof(lPrs));
lPrs.dwSize=(&lPrs,sizeof(lPrs));
if (!Process32Next(hSnap,&lPrs))//继续枚举进程信息
{
Pid=-1;
break;
}
if (strstr(targetFile,lPrs.szExeFile))
{
Pid=lPrs.th32ProcessID;
break;
}
}

return Pid;

}
NowCan 2003-07-16
  • 打赏
  • 举报
回复
进程ID容易,只要枚举所有进程做比对就可以了。县城ID不会。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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