Error

C++博客 首页 新随笔 联系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
//刷新
void CTaskerDlg::Refresh()
{
DWORD NewProcessID[200];
int NewProcessTotal;
//获得所有ID
DWORD  cbNeeded;
if ( !EnumProcesses( NewProcessID, sizeof(NewProcessID), &cbNeeded ) )  //receive all the Process ID Saved in aProcesses
{::MessageBox(NULL,TEXT(""),TEXT("Can not EnumProsses"),0);return;}
NewProcessTotal = cbNeeded / sizeof(DWORD); //the total of Process ID
//假如没有ID总数没有变化,则无需更新列表
if (NewProcessTotal==OldProcessTotal)
return;
//全部清除
m_list.DeleteAllItems();
m_imagelist.DeleteImageList( );
//设置图标
m_imagelist.Create(16,16,ILC_COLORDDB,2,2); //创建CImageList 16,16是图标的大小
m_list.SetImageList(&m_imagelist,LVSIL_SMALL);//把CListCtrl中的CImageList联   
int nItem=0;
HANDLE hProcess = NULL; //进程句柄
TCHAR szProcessName[MAX_PATH] ={0}; //进程的名称
TCHAR szProcessPath[MAX_PATH] ={0}; //进程路径
HMODULE hMod=NULL; //进程的第一个模块
    DWORD ModulecbNeeded; //储存进程模块的大小
SHFILEINFO stFileInfo;
char buf[10];
for (int i = 0; i < NewProcessTotal; i++ )
{
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE, NewProcessID[i]);//get the handle of every Process which is Indentified by Process ID
        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &ModulecbNeeded) ) // 列举某个进程的模块,第一个模块就是创建此进程的主exe程序 
{
if (    GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) ) //获得程序名
    && GetModuleFileNameEx( hProcess, hMod, szProcessPath, sizeof(szProcessPath))  )//获得模块路径
{
//获取图标
:: SHGetFileInfo(szProcessPath,0, &stFileInfo,sizeof(stFileInfo),SHGFI_ICON|SHGFI_SMALLICON ); //添加图标到m_imagelist (CImageList m_imagelist)
//向m_imagelist添加图标
int n=m_imagelist.Add(stFileInfo.hIcon);
//把程序名,路径,进程ID添加到ClistCtrl
m_list.InsertItem(nItem, szProcessName,n);//插入1行"11"代表第0列的数据 参数(行数,标题,图标索引)
m_list.SetItemText(nItem, 2, szProcessPath);
//更新Processdata[nItem].ID
Processdata[nItem].ID=NewProcessID[i];
//更新进程CPU使用率
m_list.SetItemText(nItem, 1, itoa( GetProcessUsage(&Processdata[nItem]) ,buf,10) );
//改变nItem
nItem++;
}
}
CloseHandle(hProcess);
}
//更新OldProcessID
OldProcessTotal=NewProcessTotal;
}
//删除进程
void CTaskerDlg::OnDeleteProcess() 
{
//获得选中的行
int nItem;
POSITION   pos   =   m_list.GetFirstSelectedItemPosition();   
if   (pos   !=   NULL)   
        while   (pos)   
nItem=m_list.GetNextSelectedItem(pos);   
//关闭进程
HANDLE hProcess = OpenProcess(  PROCESS_TERMINATE, FALSE, Processdata[nItem].ID );
if( NULL != hProcess )
{
if(IDOK==MessageBox("确定要删除此进程吗?","提示",MB_OKCANCEL) )
{
if( TerminateProcess( hProcess, 0 ) )
{
CloseHandle( hProcess );
//删除CListCtrl上的项
m_list.DeleteItem(nItem);
}
else
MessageBox("不能结束进程!");
}
else 
CloseHandle(hProcess);
}
}
posted on 2014-01-16 00:11 Enic 阅读(293) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理