BOOL CEnumProcessDlg::GetProceesCtrl()
{
PROCESSENTRY32 proc={0};
CString strID;
int idx=0;
HANDLE hProcess=NULL;
proc.dwSize=sizeof(PROCESSENTRY32);
HANDLE hSnay=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnay==INVALID_HANDLE_VALUE)
return FALSE;
BOOL bRed=Process32First(hSnay,&proc);
while(bRed)
{
idx=m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),_T(""));
m_ListCtrl.SetItemText(idx,0,proc.szExeFile);
strID.Empty();
strID.Format(_T("%d"),proc.th32ProcessID);
m_ListCtrl.SetItemText(idx,1,strID); hProcess=OpenProcess(PROCESS_VM_READ|PROCESS_VM_WRITE,FALSE,proc.th32ProcessID);
int m=GetLastError();
if(hProcess)
{
TCHAR szPath[MAX_PATH]={0};
GetModuleFileNameEx(hProcess,NULL,szPath,MAX_PATH);
m_ListCtrl.SetItemText(idx,2,szPath);
}
bRed=Process32First(hProcess,&proc);
}
return TRUE;
}
在win7上,OpenProcess返回错误码为0,在xp返回错误码为87,提示为参数不正确。结果把第一个参数改PROCESS_ALL_ACCESS,问题依旧,怎么解决?
{
PROCESSENTRY32 proc={0};
CString strID;
int idx=0;
HANDLE hProcess=NULL;
proc.dwSize=sizeof(PROCESSENTRY32);
HANDLE hSnay=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnay==INVALID_HANDLE_VALUE)
return FALSE;
BOOL bRed=Process32First(hSnay,&proc);
while(bRed)
{
idx=m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),_T(""));
m_ListCtrl.SetItemText(idx,0,proc.szExeFile);
strID.Empty();
strID.Format(_T("%d"),proc.th32ProcessID);
m_ListCtrl.SetItemText(idx,1,strID); hProcess=OpenProcess(PROCESS_VM_READ|PROCESS_VM_WRITE,FALSE,proc.th32ProcessID);
int m=GetLastError();
if(hProcess)
{
TCHAR szPath[MAX_PATH]={0};
GetModuleFileNameEx(hProcess,NULL,szPath,MAX_PATH);
m_ListCtrl.SetItemText(idx,2,szPath);
}
bRed=Process32First(hProcess,&proc);
}
return TRUE;
}
在win7上,OpenProcess返回错误码为0,在xp返回错误码为87,提示为参数不正确。结果把第一个参数改PROCESS_ALL_ACCESS,问题依旧,怎么解决?
BOOL CMyDlg::EnumProcess()
{
m_Process.ResetContent();
HANDLE snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
if(!snapshot)
{
MessageBox("创建快照失败!");
return FALSE;
}
PROCESSENTRY32 procsee32;
BOOL err;
int Processnum=0;
CString str="";
err=Process32First(snapshot,&procsee32);
if(err==FALSE)
{
MessageBox("获取第一个进程信息失败!");
return FALSE;
}
do{
err=Process32Next(snapshot,&procsee32);
m_arr.Format("PID : %d",procsee32.th32ProcessID);
int i=m_arr.GetLength(); switch(i)
{
case 10:str=" name : "; //PID 4位数
break;
case 9:str=" name : "; // PID 3位数
break;
case 8:str=" name : "; //PID 2位数
break;
case 7:str=" name : "; //PID 1位数
break; }
str+=procsee32.szExeFile;
m_arr+=str;
m_Process.AddString(m_arr);
Processnum++; }while(err);
str="";
str.Format("所有进程数 : %d ",Processnum);
SetDlgItemText(IDC_STATIC,str);
return TRUE;
}