//刷新
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);
		}	
	
}