HANDLE hProSnap =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (INVALID_HANDLE_VALUE == hProSnap)
{
ShowErrMessage("CreateToolhelp32Snapshot");
CDialog::OnCancel();
}
PROCESSENTRY32 pe;
int nItem = 0;
if(Process32First(hProSnap, &pe))
{
MessageBox("Hello");
do
{if (strcmp("[System Process]",pe.szExeFile) &&strcmp("System",pe.szExeFile))
{
m_CB_ProcessList.InsertString(nItem, pe.szExeFile);
m_CB_ProcessList.SetItemData(nItem, pe.th32ProcessID);
nItem++;
}
}
while(Process32Next(hProSnap, &pe));
}
else
ShowErrMessage("");
CloseHandle(hProSnap);
此处的主要问题是PROCESSENTRY32。
其在Debug下会主动预先分配内存,但是在Release下没有预先分配。当运行至此处的时候,出现内存字节不足。
有些问题DEBUG下能自动修正,比如,字符数组内存不够自动扩展,release下程序就异常。
解决此问题的方法就是声明问了pe后,主动给其分配字节大小。
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);