📄 processmgdlg.cpp
字号:
CAboutDlg dlg;
dlg.DoModal();
}
CString CProcessMgDlg::GetProcessCreateTime(DWORD dwID,int i)
{
char szHour[5];
char szMinute[5];
char szSecond[5];
FILETIME CPUTime;
FILETIME CreateTime;
FILETIME ExitTime;
FILETIME KernelTime;
FILETIME UserTime;
SYSTEMTIME SystemTime;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwID);
if (hProcess == 0)
{
return -1;
}
else
{
if (!GetProcessTimes(hProcess,&CreateTime,&ExitTime,
&KernelTime,&UserTime))
{
return -1;
}
else
{
CPUTime.dwHighDateTime = CreateTime.dwHighDateTime;
CPUTime.dwLowDateTime = CreateTime.dwLowDateTime;
FileTimeToSystemTime(&CPUTime,&SystemTime);
wsprintf(szHour,"%.2d",(SystemTime.wHour+8)%24);
wsprintf(szMinute,"%.2d",SystemTime.wMinute);
wsprintf(szSecond,"%.2d",SystemTime.wSecond);
}
}
if (i == 1)
{
return szHour;
}
if (i == 2)
{
return szMinute;
}
if (i == 3)
{
return szSecond;
}
return _T("");
}
void CProcessMgDlg::OnButtonThread()
{
// TODO: Add your control notification handler code here
CThreadDlg ThreadDlg;
ThreadDlg.m_parent = this;
int nItem = m_listctrlProcess.GetNextItem( -1,
LVNI_ALL | LVNI_SELECTED);
m_csPID = m_listctrlProcess.GetItemText(nItem,1);
if( m_csPID.IsEmpty() )
{
AfxMessageBox(_T("^_^ 请先选择一进程"));
return;
}
ThreadDlg.DoModal();
}
void CProcessMgDlg::OnButtonModule()
{
// TODO: Add your control notification handler code here
CModuleDlg ModuleDlg;
ModuleDlg.m_parent = this;
int nItem = m_listctrlProcess.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
m_csCID = m_listctrlProcess.GetItemText(nItem,1);
if (m_csCID.IsEmpty())
{
AfxMessageBox("^_^ 请先选择一进程");
return;
}
ModuleDlg.DoModal();
// 获取当前行行号
DWORD id = atol(m_csCID);
UpdateData(FALSE);
}
void CProcessMgDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point);
}
void CProcessMgDlg::OnClickListTotal(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int nItem = m_listctrlProcess.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
m_csCID= m_listctrlProcess.GetItemText(nItem,1);
DWORD dwPID = atol(m_csCID);
m_csHour = GetProcessCreateTime(dwPID,1);
m_csMinute = GetProcessCreateTime(dwPID,2);
m_csSecond = GetProcessCreateTime(dwPID,3);
UpdateData(FALSE);
*pResult = 0;
}
void CProcessMgDlg::OnTimer(UINT nIDEvent)
{
// 显示系统时间
DisplaySystemTime();
CDialog::OnTimer(nIDEvent);
}
BOOL CProcessMgDlg::DestroyWindow()
{
return CDialog::DestroyWindow();
}
void CProcessMgDlg::UpdateProcess()
{
UpdateData(TRUE);
m_listctrlProcess.DeleteAllItems(); // 清空列表
DWORD idxList = 1;
int nCount = 0;
HANDLE hProcess;
char szCount[56];
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("^_^ CreateToolhelp32Snapshot调用失败"));
return;
}
BOOL bMore = ::Process32First(hProcessSnap,&pe32);
while (bMore)
{
m_listctrlProcess.InsertItem(1,pe32.szExeFile);
wsprintf(szID,_T("%u"),pe32.th32ProcessID);
wsprintf(szCount,_T("%u"),pe32.cntThreads);
m_listctrlProcess.SetItemText(idxList,1,szID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
m_listctrlProcess.SetItemText(idxList,2,GetProcessPriority(hProcess));
m_listctrlProcess.SetItemText(idxList,4,GetProcessPath(pe32.th32ProcessID));
m_listctrlProcess.SetItemText(idxList,3,szCount);
nCount++;
bMore = ::Process32Next(hProcessSnap,&pe32);
}
::CloseHandle(hProcessSnap);
char szNum[5];
wsprintf(szNum,_T("%d"),nCount);
m_nNumberofProcess = szNum;
UpdateData(FALSE);
}
void CProcessMgDlg::OnSystemQuit()
{
CDialog::OnCancel();
}
void CProcessMgDlg::DisplaySystemTime()
{
CTime time = CTime::GetCurrentTime();
CString csDate = time.Format(_T("今天是:%Y年%m月%d日"));
// 在状态栏上显示时间
m_statusbar.SetText( csDate, 1, 1 );
}
void CProcessMgDlg::OnRclickListTotal(NMHDR* pNMHDR, LRESULT* pResult)
{
POSITION pos = m_listctrlProcess.GetFirstSelectedItemPosition();
if( NULL == pos )
{
// 提示先选择进程
AfxMessageBox(_T("^_^ 请先选择一进程"));
return;
}
int nIndexInFieldList = 0;
while (pos)
{
// Get index of the selected item
nIndexInFieldList = m_listctrlProcess.GetNextSelectedItem(pos);
m_csPID = m_listctrlProcess.GetItemText( nIndexInFieldList, 1 );
if( m_csPID.IsEmpty() )
{
AfxMessageBox(_T("^_^ 没有可被终止的进程"));
return;
}
}
int ret = MessageBox( _T("^_^ 你真想结束该进程吗?"), _T("友情询问"),
MB_ICONASTERISK|MB_YESNO );
if( ret != IDYES )
{
return ;
}
OnButtonTerminate();
*pResult = 0;
}
void CProcessMgDlg::OnButtonNewprocess()
{
// TODO: Add your control notification handler code here
CString csFileName;
CFileDialog fDlg(TRUE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("Executable files(*.exe)|*.exe|All files (*.*)|*.*||"));
if (fDlg.DoModal() == IDOK)
{
csFileName = fDlg.GetPathName();
}
else
{
return;
}
STARTUPINFO si = {sizeof(si)} ;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = TRUE;
PROCESS_INFORMATION pi;
char *buf;
buf = csFileName.GetBuffer(100);
// 新建一个进程
BOOL bRet = ::CreateProcess(NULL,
buf,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
&pi);
// 更新进程
OnButtonUpdateprocess();
}
void CProcessMgDlg::OnButtonTerminate()
{
// TODO: Add your control notification handler code here
CString m_csPID = _T("");
// 取得第一个位置
POSITION pos = m_listctrlProcess.GetFirstSelectedItemPosition();
if (NULL == pos)
{
// 提示选择进程
AfxMessageBox("^_^ 请先选择一进程");
return;
}
int nIndexInFieldList = 0;
while (pos)
{
// 取得选择项目的索引
nIndexInFieldList = m_listctrlProcess.GetNextSelectedItem(pos);
m_csPID = m_listctrlProcess.GetItemText( nIndexInFieldList, 1 );
if( m_csPID.IsEmpty())
{
AfxMessageBox("^_^ 没有可显示的进程");
return;
}
// 为选择项设定焦点
m_listctrlProcess.SetFocus();
TerminateProcessID( atol(m_csPID) );
// 删除被选择的项目
m_listctrlProcess.DeleteItem( nIndexInFieldList );
// 重新取得第一个位置
pos = m_listctrlProcess.GetFirstSelectedItemPosition();
}
// 更新进程
OnButtonUpdateprocess();
}
void CProcessMgDlg::OnButtonUpdateprocess()
{
// TODO: Add your control notification handler code here
UpdateProcess();
return;
}
void CProcessMgDlg::OnButtonClear()
{
// TODO: Add your control notification handler code here
m_listctrlProcess.DeleteAllItems();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -