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

zych72 2003-07-16 07:08:07

在线等候,多谢
...全文
161 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不会。
内容概要:本文围绕二维时域有限差分法(2D FDTD)展开研究,重点实现了包含全场散射场(TFSF)源与单轴各向异性完全匹配层(UPML)吸收边界的数值仿真方法。通过Matlab编程,构建了完整的FDTD仿真框架,有效抑制了计算区域边界的非物理反射,提升了开放空间电磁波传播问题的仿真精度与稳定性。文中系统阐述了FDTD的核心差分方程、TFSF源的引入机制以区分入射场与散射场,以及UPML边界条件的理论推导与离散化实现过程,并通过典型算例验证了该复合方法的有效性与实用性,为复杂电磁散射问题的建模与分析提供了可靠的技术支撑。; 适合人群:具备电磁场与电磁波理论基础、数值计算方法知识及Matlab编程能力的研究生、博士生和相关领域的科研人员。; 使用场景及目标:①电磁兼容性(EMC)分析;②天线近场与远场辐射特性仿真;③生物医学中的电磁波与组织相互作用研究;④新型隐身材料与超材料的散射特性评估;⑤无线通信系统中复杂环境下的电波传播建模。; 阅读建议:建议读者在学习前巩固麦克斯韦方程组和FDTD基本原理,然后结合提供的Matlab代码,逐模块分析TFSF源的注入逻辑和UPML各参数层的更新过程,通过改变介质参数或几何结构进行仿真实验,以深入理解边界条件对计算稳定性和精度的关键影响。

15,466

社区成员

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

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