模仿WINDOWS任务管理器,实现了基本功能,有时间就完善功能,

//其中m_list是 CListCtrl

根据名字可以看出函数的功能。
bool CTasklistDlg::InitTaskList()
{
SetListStyle();
BOOL r;
HANDLE h;
PROCESSENTRY32 pe;
//::ZeroMemory(&pe,sizeof(PROCESSENTRY32));
pe.dwSize=sizeof(PROCESSENTRY32);
h = CreateToolhelp32Snapshot(2,0);
r = Process32First(h, &pe);
if(!r)
return false;
m_list.InsertColumn(0,”进程编号”,LVCFMT_LEFT,60);
m_list.InsertColumn(1,”进程ID”,LVCFMT_LEFT,60);
m_list.InsertColumn(2,”线程数”,LVCFMT_LEFT,60);
m_list.InsertColumn(3,”进程名”,LVCFMT_LEFT,120);
m_list.InsertColumn(4,”用户名”,LVCFMT_LEFT,120);
m_list.InsertColumn(5,”CPU”,LVCFMT_LEFT,60);
m_list.InsertColumn(6,”内存使用”,LVCFMT_LEFT,60);
long index=0;
while(r) {
//printf(“%5d %s
“, pe.th32ProcessID,pe.szExeFile);
CString str;
/*   m_list.InsertItem(0,str,0);
str.Format(“%2d”,pe.cntThreads);
m_list.InsertItem(1,str,1);
str.Format(“%s”,pe.szExeFile);
m_list.InsertItem(2,str,NULL);
str.Format(“%5d”,pe.th32ParentProcessID);
m_list.InsertItem(3,str,NULL);
str.Format(“%5d”,pe.th32ParentProcessID);
m_list.InsertItem(4,str,0);
str.Format(“%5d”,pe.th32ParentProcessID);
m_list.InsertItem(5,str,0);*/
char buf[MAX_PATH];
memset(buf,0,sizeof(buf));
sprintf(buf,”%4d”,index++);
LVITEM item={0};
item.iItem=0; //行号
item.mask=LVIF_TEXT; /*LVIF_IMAGE支持图标*/;
item.cchTextMax=15;//插入字符串长度
item.pszText=buf;
int nRow=m_list.InsertItem(&item);
str.Format(“%5d”,pe.th32ProcessID);
m_list.SetItemText(nRow,1,str);
str.Format(“%2d”,pe.cntThreads);
m_list.SetItemText(nRow,2,str);
str.Format(“%s”,pe.szExeFile);
m_list.SetItemText(nRow,3,str);
m_list.SetItemText(nRow,4,GetProcessAuth(pe.th32ProcessID));
r = Process32Next(h, &pe);
}
return true;
}

void CTasklistDlg::SetListStyle()
{
DWORD dwStyle = m_list.GetExtendedStyle(); //获取当前扩展样式
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(report风格时)
dwStyle |= LVS_EX_GRIDLINES; //网格线(report风格时)
dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle); //设置扩展风格

}

void CTasklistDlg::OnKillprocess()
{
int index=m_list.GetSelectionMark();
CString temp,str;
str=m_list.GetItemText(index,1);
HANDLE pid=OpenProcess(PROCESS_ALL_ACCESS,FALSE,atol(str));
if(TerminateProcess(pid,0))
MessageBox(“关闭进程成功!”);
else
MessageBox(“关闭进程失败!”);
InitTaskList();
}

CString CTasklistDlg::GetProcessAuth(long pid)
{
//获得运行进程的用户身份,此处对于8以上的进程没问题,对于8,0进程无法列出(8是Win2000下的,WinXP下为4)
SID_NAME_USE   peUse;
CString strPath;
HANDLE   hp;
HANDLE   hToken;
int   isok;
char   buf[0x400];
char   buf1[100];
char   buf2[100];
DWORD   dwNumBytesRet;
DWORD   dwNumBytesRet1;

hp=OpenProcess(0×400,   0,   pid);//0×400   is   PROCESS_QUERY_INFORMATION
isok=OpenProcessToken(hp,   0×20008,   &hToken);//这个0×20008不知道什么,TOKEN_QUERY?
if(isok)
{
isok=GetTokenInformation(hToken,   TokenUser,   &buf,   0×400,   &dwNumBytesRet);
if(isok)
{
dwNumBytesRet=100;
dwNumBytesRet1=100;
isok=LookupAccountSid(NULL,   (DWORD   *)   (*(DWORD   *)buf),   buf1,   &dwNumBytesRet,   buf2,   &dwNumBytesRet1,   &peUse);
if(isok)
{
strPath.Format(“%s”,buf1);
// strPathValid   =   strPath;
}

CloseHandle(hToken);
}
}
CloseHandle(hp);
return strPath;
}

void CTasklistDlg::OnOwner()
{
int index=m_list.GetSelectionMark();
CString temp,str;
str=m_list.GetItemText(index,1);
// HANDLE pid=OpenProcess(PROCESS_ALL_ACCESS,FALSE,atol(str));
temp=GetProcessAuth(atol(str));
MessageBox(temp);

}

void CTasklistDlg::OnMemory()
{
int index=m_list.GetSelectionMark();
CString temp,str;
str=m_list.GetItemText(index,1);
// HANDLE pid=OpenProcess(PROCESS_ALL_ACCESS,FALSE,atol(str));
// PPROCESS_MEMORY_COUNTERS p;
SYSTEM_INFO sys;
GetSystemInfo(&sys);
DWORD ver=GetProcessVersion(0);
// temp.Format(“%d %s %d %d %c %d”,”",ver,sys.wProcessorArchitecture,sys.dwOemId,sys.wProcessorRevision,sys.wReserved);
char prompt[200];

DWORD version = GetProcessVersion(0);
MEMORYSTATUS mem;
GlobalMemoryStatus(&mem);
sprintf(prompt, “the current process version is:%x total:%d
“, version,mem.dwMemoryLoad);
sprintf(prompt,”totalSize:%d MB avail:%d MB totalVirtual:%d Length:%d pageFile:%ld totalPageFile:%ld”,
mem.dwTotalPhys/1024,mem.dwAvailPhys/1024,mem.dwAvailVirtual,mem.dwMemoryLoad,
mem.dwAvailPageFile,mem.dwTotalPageFile);

MessageBox(prompt);

}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>