📄 mfctlistdlg.cpp
字号:
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 + -