⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfctlistdlg.cpp

📁 一个进程管理的源程序.zip
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        str1.Format("%6ld", refTaskList[n]->processPriority);
		pList->SetItemText(nItem, 3, str1);
        CString cnt;
		cnt.Format("%6ld", refTaskList[n]->cntThreads);
        pList->SetItemText(nItem, 4,cnt );
		pList->SetItemText(nItem, 5, refTaskList[n]->WindowTitle);
		pList->SetItemText(nItem, 6, refTaskList[n]->szExeFile);
	}

	pList->SetColumnWidth(0, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(1, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(2, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(3, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(4, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(5, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(6, LVSCW_AUTOSIZE);
	CWnd* pWnd = GetDlgItem(IDC_KILL);
	pWnd->EnableWindow(FALSE);
	CWnd* pWnd1 = GetDlgItem(IDC_PRIORITY);
	pWnd1->EnableWindow(FALSE);
   
	//END_SAMPLE
}

void CMFCTListDlg::OnItemchangedTasklist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_ThreadList);
	ASSERT(pList != NULL);
	int k = pList->GetNextItem(-1, LVIS_SELECTED);

	CWnd* pWnd = GetDlgItem(IDC_KILL);
	pWnd->EnableWindow(k==-1);
	CWnd* pWnd1 = GetDlgItem(IDC_PRIORITY);
	pWnd1->EnableWindow(k == -1);	
	*pResult = 0;
    DoTRefresh();
}

void CMFCTListDlg::OnPriority() 
{
	CReadPrority my;
	
	if(my.DoModal()==IDOK)
	{
        DWORD m_p=my.GetPriority();
	    ASSERT(m_p!=-1);
		CMFCTListApp* pApp = (CMFCTListApp*) AfxGetApp();
	    //pApp->ClearTaskList();
		CTaskList& refTaskList = pApp->GetTaskList();

      
		CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_TASKLIST);
	    ASSERT(pList != NULL);
		int n = pList->GetNextItem(-1, LVIS_SELECTED);
		HANDLE  hProcess;
		//CString str,str1;
		//str.Format("0x%8.8X", refTaskList[n]->dwProcessId);
        hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, refTaskList[n]->dwProcessId );
		BOOL i=SetPriorityClass(hProcess,m_p);
		if(i==0)
		{
			AfxMessageBox("seting Process priority  is fail!");
			return ;
		}
		OnRefresh();
	}
	// TODO: Add your control notification handler code here
	
}

void CMFCTListDlg::OnColumnclickTasklist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	flag=!flag;
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_TASKLIST);
    //pList->SortItems(CompareProc,pNMListView->iSubItem);
    DoRefresh();
    CMFCTListApp* pApp = (CMFCTListApp*) AfxGetApp();
	CTaskList& list = pApp->GetTaskList();
	int count=list.GetSize();

    count =list.GetUpperBound();
	for(int i=0;i<count;i++)
	{
		int max=i;
		for(int j=i+1;j<=count;j++)
		 switch(pNMListView->iSubItem)
		 {
		 case 0:
           if((lstrcmpi(list[max]->ProcessName,list[j]->ProcessName)<0))
				  max=j;
	
		   break;
		 case 1: 
			 if((unsigned long)list[j]->dwProcessId>(unsigned long)list[max]->dwProcessId)
			  max=j;
			 break;
		 case 2:
			 if((unsigned long)list[j]->th32ParentProcessID>(unsigned long)list[max]->th32ParentProcessID)
			  max=j; 
             
			 break;     
		 case 3:
	         if(list[j]->processPriority>list[max]->processPriority)
             max=j;
			 break;		 
		 case 4:
			 
			 if((list[j]->cntThreads>list[max]->cntThreads))
			 max=j;

			 break;
		 default:;
		}
		if(i^max)
		{
		CTaskListEntry temp;
		swap(&temp,list[max]);
		swap(list[max],list[i]);
		swap(list[i],&temp);
		}
	}
	/*CMFCTListApp* pApp = (CMFCTListApp*) AfxGetApp();
	pApp->ClearTaskList();
	CTaskList& refTaskList = pApp->GetTaskList();*/
	pList->DeleteAllItems();
	int n;
	for (n = 0; n <= count; n++)
	{   
		HANDLE  hProcess;
		CString str,str1;
		str.Format("0x%8.8X", list[n]->dwProcessId);
        hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, list[n]->dwProcessId );

		str.Format("0x%8.8X", list[n]->dwProcessId);
		int	nItem;
		nItem=pList->InsertItem(n, list[n]->ProcessName);
		pList->SetItemText(nItem, 1, str);
		CString pid;
		pid.Format("0x%8.8X",list[n]->th32ParentProcessID);
        pList->SetItemText(nItem, 2,pid );
		DWORD pi=GetPriorityClass(hProcess);
        str1.Format("%6ld", pi);
		pList->SetItemText(nItem, 3, str1);
        CString cnt;
		cnt.Format("%6ld", list[n]->cntThreads);
        pList->SetItemText(nItem, 4,cnt );
		pList->SetItemText(nItem, 5, list[n]->WindowTitle);
		pList->SetItemText(nItem, 6, list[n]->szExeFile);
	}

	pList->SetColumnWidth(0, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(1, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(2, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(3, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(4, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(5, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(6, LVSCW_AUTOSIZE);

	*pResult = 0;
}

int CALLBACK CMFCTListDlg::CompareProc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
{
	//CMFCTListApp* pApp = (CMFCTListApp*) AfxGetApp();
	//CTaskList& refTaskList = pApp->GetTaskList();
   CTaskListEntry  *p1=( CTaskListEntry *)lParam1; 
   CTaskListEntry  *p2=( CTaskListEntry *)lParam2; 
   LPSTR ps1,ps2;
   DWORD i,j;
    int iResult;
	if(1)
	{
	  switch(lParamSort)
	  {
	  case 0:
		  ps1=p1->ProcessName;
		  ps2=p2->ProcessName;
		  iResult=lstrcmpi(ps1,ps2);
		  break;
	  case 1:
		  i=p1->cntThreads;
		  j=p2->cntThreads;
		  iResult=i>j;
		  break;
	  default:
		  iResult=1;
	  }
	}
  return iResult;
}
void CMFCTListDlg::swap(CTaskListEntry *a, CTaskListEntry  *list)

	{  
		a->dwSize=list->dwSize;  
	    a->cntUsage=list->cntUsage;   
	    a->th32ProcessID=list->th32ProcessID; 
        a->th32DefaultHeapID=list->th32DefaultHeapID;
		a->th32ModuleID=list->th32ModuleID; 
        a->cntThreads=list->cntThreads; 
        a->th32ParentProcessID=list->th32ParentProcessID;    
	    a->pcPriClassBase=list->pcPriClassBase;   
	    a->dwFlags=list->dwFlags; 
        lstrcpy(a->szExeFile,list->szExeFile); 
	    a->dwProcessId=list->dwProcessId;
        a->dwInheritedFromProcessId=list->dwInheritedFromProcessId;
        a->flags=list->flags;
        a->hwnd=list->hwnd;
		a->processPriority=list->processPriority;
        lstrcpy(a->ProcessName,list->ProcessName);
        lstrcpy(a->WindowTitle,list->WindowTitle);
	}
void CMFCTListDlg::DoTRefresh()
{
	CListCtrl* pList1 = (CListCtrl*) GetDlgItem(IDC_TASKLIST);
	ASSERT(pList1 != NULL);
	int k = pList1->GetNextItem(-1, LVIS_SELECTED);
	if(k==-1)return;
	
	CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_ThreadList);
	ASSERT(pList != NULL);

    // Determine what system we're on and do the right thing
    LPGetTaskList     GetTaskList;
    LPEnableDebugPriv EnableDebugPriv;

    OSVERSIONINFO verInfo;
	memset(&verInfo, 0, sizeof(verInfo));

    verInfo.dwOSVersionInfoSize = sizeof(verInfo);
    GetVersionEx(&verInfo);

    switch (verInfo.dwPlatformId)
    {
    case VER_PLATFORM_WIN32_NT:
		GetTaskList     = GetTaskListNT;
		EnableDebugPriv = EnableDebugPrivNT;
		break;

    case VER_PLATFORM_WIN32_WINDOWS:
		GetTaskList = GetTaskList95;
		EnableDebugPriv = EnableDebugPriv95;
		break;

    default:
//		m_bBroken = TRUE;
		pList->InsertItem(0, _T("Requires Win95 or WinNT"));
		return;
    }

    EnableDebugPriv();

  
	CMFCTListApp* pApp = (CMFCTListApp*) AfxGetApp();
	//pApp->ClearTaskList();
	CTaskList& refTaskList = pApp->GetTaskList();
    DWORD numTasks = GetTaskList(refTaskList);
	
	int Value=pList->DeleteAllItems();
	ASSERT(Value);
	
    HANDLE  hProcess;
	hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, refTaskList[k]->dwProcessId );
	DWORD i=0;
	for (i = 0; i < refTaskList[k]->cntThreads; i++)
	{   DWORD threadId=GetCurrentThreadId();
        HANDLE thread=GetCurrentThread();
        DWORD processId=GetCurrentProcessId();
        HANDLE process=GetCurrentProcess();
	    int	nItem;
     	CString str;
		str.Format("0x%8.8X",process);
		nItem=pList->InsertItem(i,str);
		str.Format("0x%8.8X", processId);//refTaskList[k]->dwProcessId); 
		pList->SetItemText(nItem, 1, str);
		str.Format("0x%8.8X",thread);
        pList->SetItemText(nItem, 2,str );
		str.Format("0x%8.8X",threadId);
        pList->SetItemText(nItem, 3,str );
		pList->SetItemText(nItem, 4, refTaskList[k]->szExeFile);
	}

	pList->SetColumnWidth(0, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(1, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(2, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(3, LVSCW_AUTOSIZE);
	pList->SetColumnWidth(4, LVSCW_AUTOSIZE);
	//Sleep(1000);
  
}

void CMFCTListDlg::OnItemchangingThreadList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
}

void CMFCTListDlg::OnColumnclickThreadList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_ThreadList);
    pList->SortItems(CompareProc,pNMListView->iSubItem);	
	*pResult = 0;
 
}
void CMFCTListDlg::ClearThread()
{
 CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_ThreadList);
 pList->DeleteAllItems();
}

void CMFCTListDlg::OnAboutbox() 
{
	// TODO: Add your command handler code here
	CAboutDlg AboutDlg;
	AboutDlg.DoModal();
	
}

	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -