📄 tazkmandlg.cpp
字号:
// TazkManDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TazkMan.h"
#include "TazkManDlg.h"
#include "winuser.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <winioctl.h>
////////////////////////或者包函#include "Pkfuncs.h"
#define IOCTL_HAL_REBOOT CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_HAL_PRESUSPEND CTL_CODE(FILE_DEVICE_HAL, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
extern "C"
{
__declspec(dllimport)
BOOL KernelIoControl(
DWORD dwIoControlCode,
LPVOID lpInBuf,
DWORD nInBufSize,
LPVOID lpOutBuf,
DWORD nOutBufSize,
LPDWORD lpBytesReturned);
void PowerOffSystem(void);
}
/////////////////////////////////////////////////////////////////////////////
// CTazkManDlg dialog
CTazkManDlg::CTazkManDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTazkManDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTazkManDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTazkManDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTazkManDlg)
DDX_Control(pDX, IDC_LIST_PROCESS, m_ctrlListProcess);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTazkManDlg, CDialog)
//{{AFX_MSG_MAP(CTazkManDlg)
ON_NOTIFY(NM_CLICK, IDC_LIST_PROCESS, OnClickListProcess)
ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
ON_BN_CLICKED(IDC_DETAILS, OnDetails)
ON_BN_CLICKED(IDC_TERMINATE, OnTerminate)
ON_BN_CLICKED(IDC_RESTART, OnRestart)
ON_BN_CLICKED(IDC_RESTART2, OnRestart2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTazkManDlg message handlers
BOOL CTazkManDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
//初始化列表
m_ctrlListProcess.InsertColumn(0,_T("序号"),LVCFMT_LEFT,30,-1);
m_ctrlListProcess.InsertColumn(1,_T("进程名称"),LVCFMT_LEFT,100,-1);
m_ctrlListProcess.InsertColumn(2,_T("线程数"),LVCFMT_LEFT,30,-1);
m_ctrlListProcess.InsertColumn(3,_T("进程ID"),LVCFMT_LEFT,100,-1);
m_ctrlListProcess.SetExtendedStyle(LVS_EX_FULLROWSELECT);
//获取进程列表
OnRefresh();
return TRUE; // return TRUE unless you set the focus to a control
}
void CTazkManDlg::ClearList()
{
m_ctrlListProcess.DeleteAllItems();
m_nCurrentSelect=-1;
}
void CTazkManDlg::GetProcesses()
{
BOOL bResult;
HANDLE hSnap;
hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
int i=0;
CString re;
if(hSnap!=INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe;
pe.dwSize=sizeof(pe);
for(bResult=Process32First(hSnap,&pe);bResult;bResult=Process32Next(hSnap,&pe))
{
re.Format(L"%d",i+1);
m_ctrlListProcess.InsertItem(i,re);
re=CString(pe.szExeFile);
m_ctrlListProcess.SetItemText(i,1,re);
re.Format(L"%d",pe.cntThreads);
m_ctrlListProcess.SetItemText(i,2,re);
re.Format(L"%X",pe.th32ProcessID);
m_ctrlListProcess.SetItemText(i,3,re);
m_ctrlListProcess.SetItemData(i,pe.th32ProcessID);
i++;
}
}
CloseToolhelp32Snapshot(hSnap);
}
void CTazkManDlg::OnClickListProcess(NMHDR* pNMHDR, LRESULT* pResult)
{
m_nCurrentSelect=m_ctrlListProcess.GetSelectionMark();
*pResult = 0;
}
void CTazkManDlg::OnRefresh()
{
ClearList();
GetProcesses();
}
void CTazkManDlg::OnDetails()
{
if(m_nCurrentSelect==-1)
{
AfxMessageBox(L"请先在列表中选择需要查看的进程!");
return;
}
CModuleDlg Dialog1;
Dialog1.m_dwProcessID=m_ctrlListProcess.GetItemData(m_nCurrentSelect);
CString ProcessName;
ProcessName=m_ctrlListProcess.GetItemText(m_nCurrentSelect,1);
unsigned short path[MAX_PATH];
DWORD ProcessID=m_ctrlListProcess.GetItemData(m_nCurrentSelect);
HANDLE hProcess=OpenProcess(0,FALSE,ProcessID);
GetModuleFileName((HINSTANCE)hProcess,path,MAX_PATH);
CloseHandle(hProcess);
Dialog1.m_strProcessFile=path;
Dialog1.DoModal();
}
void CTazkManDlg::OnTerminate()
{
if(m_nCurrentSelect==-1)
{
AfxMessageBox(L"请先在列表中选择需要结束的进程!");
return;
}
DWORD ProcessID=m_ctrlListProcess.GetItemData(m_nCurrentSelect);
HANDLE hProcess=OpenProcess(0,FALSE,ProcessID);
TerminateProcess(hProcess,NULL);
CloseHandle(hProcess);
OnRefresh();
}
//#include "Pkfuncs.h"
void CTazkManDlg::OnRestart()
{
if(AfxMessageBox(L"将会造成未保存的工作丢失,确实要重启么?",MB_YESNO)==IDYES)
{
KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL);//重启
//KernelIoControl(IOCTL_HAL_PRESUSPEND, NULL, 0, NULL, 0, NULL);//休眠
}
}
void CTazkManDlg::OnRestart2()
{
// TODO: Add your control notification handler code here
if(AfxMessageBox(L"将会造成未保存的工作丢失,确实要关机么?",MB_YESNO)==IDYES)
{
keybd_event(VK_OFF,0,0,0);
keybd_event(VK_OFF,0,KEYEVENTF_KEYUP,0);
}
//PowerOffSystem();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -