while(1){ AfxMessageBox("开始一轮");
HANDLE hSnapShot = NULL;
BOOL reboot = 1;//重启标志位
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获取当前进程快照
PROCESSENTRY32 prosInfo;//定义PROCESSENTRY32结构
prosInfo.dwSize = sizeof(prosInfo);//设置PROCESSENTRY32结构大小
BOOL bStatus = Process32First(hSnapShot, &prosInfo);//获得第一个进程的句柄
while(bStatus){
CString scTmp = prosInfo.szExeFile;//获得进程全名
scTmp.MakeUpper();//将csTmp字符串转为大写
AfxMessageBox(scTmp);//显示进程名称
bStatus = Process32Next(hSnapShot, &prosInfo);
if(scTmp != "IPMSG.EXE"){
bStatus = Process32Next(hSnapShot, &prosInfo);//获得下一个进程的句柄
}
}
CloseHandle(hSnapShot);//关闭快照
AfxMessageBox("本轮结束");
}
这是一个简单的进程查看程序,请教各位高手,我的问题是,我运行本程序,在第一轮快结束的时候,我打开另外一个程序(例如飞鸽传书:IPMSG.exe),但是在第二轮,第三轮等等之后我都看不到有IPMSG.exe的显示,这是为什么呢?
你已经获取了进程的快照,但是这个时候,你所谓的另外的程序并没有发生。由于快照就是一个”静态“的
:即保存了当前的进程。它不会发生变化。
要先关闭!
while(bStatus){
CString scTmp = prosInfo.szExeFile;//获得进程全名
scTmp.MakeUpper();//将csTmp字符串转为大写
AfxMessageBox(scTmp);//显示进程名称
bStatus = Process32Next(hSnapShot, &prosInfo);
if(scTmp == "IPMSG.EXE"){
AfxMessageBox(scTmp);//这就够了
//bStatus = Process32Next(hSnapShot, &prosInfo);//这行多余,隔一个判断一个?
}
}