在VC取进程的问题,急呀!

HANDLE hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pinfo;
MODULEENTRY32 minfo;

BOOL report=Process32First(hProcess,&pinfo);

BOOL t=true;
AfxMessageBox(pinfo.szExeFile);
while(report) //判断ivs程序是否运行,运行的话要关闭
{

HANDLE hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pinfo.th32ProcessID);
Module32First(hModule, &minfo);

if(strcmp("try.exe",pinfo.szExeFile)==0)
{
AfxMessageBox("try程序正在运行");

t=false;
break;
}
report=Process32Next(hProcess, &pinfo);

}
请问大家为什么我在运行这段代码的时候,如果事先没开try.exe或打开了try.exe再运行这段代码结果都是正确,也就是这能准确遍历所有的进程,当找到try.exe时显示"try程序正在运行",很奇怪的是,当我运行这段程序,再打开try.exe时,点击确定 但道理说应该显示"try程序正在运行",但结果发现,找不到这个进程,为什么呢,真的不明白,各位大侠,帮帮忙,今 天要解决掉
[806 byte] By [lj22-小杰] at [2008-4-11]
# 1
我用的是windows 2000 professional OS会影响吗
lj22-小杰 at 2007-10-16 > top of Msdn China Tech,VC/MFC,基础类...
# 2
windows2000pro,程序正常!
楼主的try.exe建立时间需要很长?
# 3
一运行就在进程列表中显示了,也不算长吧
lj22-小杰 at 2007-10-16 > top of Msdn China Tech,VC/MFC,基础类...
# 4
上面的代码不会是在程序初始化的时候执行的吧,放点击确定的处理函数里面了吗??
# 5
当我运行这段程序,再打开try.exe时,点击确定 但道理说应该显示"try程序正在运行",但结果发现,找不到这个进程,为什么呢,真的不明白,各位大侠,帮帮忙,今 天要解决掉

///////////////////////////////////////////////////////////////////

你先运行的这段程序,当时还没有运行Try.exe程序,所以没有找到。以后再运行Try.exe相当于没有作用。

你的那个代码只能找运行时已经存在的进程,还没运行的不能找

再说了你的结构体没有初始化,会有潜在的问题
xiaoshi0-Rain at 2007-10-16 > top of Msdn China Tech,VC/MFC,基础类...
# 6
PROCESSENTRY32 pinfo;
MODULEENTRY32 minfo;
ZeroMemory(&pinfo, sizeof(pinfo));
ZeroMemory(&minfo, sizeof(minfo));

//下面这句,你把她们都转成大写再比较.
if(strcmp("try.exe",pinfo.szExeFile)==0)
# 7
楼上的不正确,应该:

PROCESSENTRY32 pe = {sizeof(pe)};
MODULEENTRY32 me = {sizeof(me)};
xiaoshi0-Rain at 2007-10-16 > top of Msdn China Tech,VC/MFC,基础类...
# 9
不正确也谈不上,最多再加两句话啦。

嗯,这里的结构不初始化会有隐患的。

这段代码只遍历一遍进程,然后你才打开那个文件,当然就找不到啦。

如果你希望能够找到,就把这段代码方到OnTimer里面吧,找到以后KillTimer就是啦。
littlepboy-vc小p孩 at 2007-10-16 > top of Msdn China Tech,VC/MFC,基础类...
# 10
不好意思,漏写了^_^