在学习界面设计,因为对一些控件不熟悉,所以也参考了别人的。核心代码如下。

void CTasklistDlg::Expand()
{
m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
m_list.InsertColumn(,L"Process Name",,);
m_list.InsertColumn(,L"Pid",,);
m_list.InsertColumn(,L"Path",,);
} void CTasklistDlg::OnNMRClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: Add your control notification handler code here
CMenu popup;
popup.LoadMenu(IDR_MENU1);
CMenu* pM = popup.GetSubMenu();
CPoint p;
GetCursorPos(&p);
int count = pM->GetMenuItemCount();
if (m_list.GetSelectedCount() == ) //如果没有选中
{
for (int i = ; i < count; i++)
{
pM->EnableMenuItem(i, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //菜单全部变灰
} }
pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this); *pResult = ;
} #include<Tlhelp32.h>
#include<Psapi.h>
#pragma comment(lib,"Psapi.lib") BOOL CTasklistDlg::GetProcessList()
{
BOOL result = FALSE;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, );
if (hSnap == INVALID_HANDLE_VALUE)
return FALSE; int idx = ;
CString strID;
HANDLE hProcess = NULL;
CString strPath, strSys(_T("SystemRoot")); PROCESSENTRY32 info = { };
info.dwSize = sizeof(PROCESSENTRY32); BOOL bRet = Process32First(hSnap,&info); while (bRet)
{
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, info.th32ProcessID);
if (hProcess)
{
strPath.Empty();
DWORD dwRet = GetModuleFileNameEx(hProcess, NULL, strPath.GetBufferSetLength(MAX_PATH), MAX_PATH);
strPath.ReleaseBuffer();
strPath.TrimLeft(_T("\\?"));
if (strPath.Left(strSys.GetLength()).CompareNoCase(strSys) == )
{
TCHAR szWin[MAX_PATH] = { };
GetWindowsDirectory(szWin,MAX_PATH);
strPath.Replace(strSys,szWin); }
SHFILEINFO shInfo = { };
SHGetFileInfo(strPath, , &shInfo, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_ICON);
} idx = m_list.InsertItem(m_list.GetItemCount(), info.szExeFile);
strID.Empty();
strID.Format(_T("%d"), info.th32ProcessID);
m_list.SetItemText(idx, , strID);
m_list.SetItemText(idx, , strPath); bRet = Process32Next(hSnap, &info);
} return TRUE;
} BOOL CTasklistDlg::AdjustPrivileges()
{
HANDLE hToken = NULL;
TOKEN_PRIVILEGES tp = { };
TOKEN_PRIVILEGES oldtp = { };
DWORD dwSize = sizeof(TOKEN_PRIVILEGES);
LUID luid = { }; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
return TRUE;
else
return FALSE;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
CloseHandle(hToken);
return FALSE;
} tp.PrivilegeCount = ;
tp.Privileges[].Luid = luid;
tp.Privileges[].Attributes = SE_PRIVILEGE_ENABLED; /* Adjust Token Privileges */
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
CloseHandle(hToken);
return FALSE;
} // close handles
CloseHandle(hToken);
return TRUE;
}
void CTasklistDlg::OnKillprocess()
{
// TODO: Add your command handler code here
//DWORD ProcessID = 0;
DWORD dwProcess;
wchar_t szBuf[MAX_PATH] = {};
int index = m_list.GetSelectionMark(); //获取光标所在的位置
m_list.GetItemText(index, , szBuf, MAX_PATH); //获取多少行光标,然后取得数据
dwProcess = _wtol(szBuf);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcess);
if (NULL == hProcess)
{
MessageBox(L"打开那进程句柄失败!");
} if (TerminateProcess(hProcess, ))
{
PROCESSITEM* pProcItem;
pProcItem = (PROCESSITEM*)m_list.GetItemData(index);
delete pProcItem;
m_list.DeleteItem(index);
MessageBox(L"进程结束成功");
}
else
{
MessageBox(L"结束进程失败!");
}
} void CTasklistDlg::OnInfoExit()
{
exit();
// TODO: Add your command handler code here
} void CTasklistDlg::OnInfoRefresh()
{
// TODO: Add your command handler code here
m_list.SetRedraw(FALSE);
m_list.DeleteAllItems();
GetProcessList();
m_list.SetRedraw(TRUE);
m_list.Invalidate();
m_list.UpdateWindow();
}

MFC 任务管理器设计的更多相关文章

  1. MFC任务管理器task manager----进程的挂起与恢复--NtSuspendProcess&&NtResumeProcess

    http://hi.baidu.com/xbbsh/blog/item/b73d3125462201084c088db1.html ---------------------------------- ...

  2. 【MFC】MFC DLEdit 设计属于自己的编辑框_鼠标悬停

    MFC DLEdit 设计属于自己的编辑框 2012-02-04 13:00 by 捣乱小子, 3543 阅读, 5 评论, 收藏, 编辑 起因 无意间看到了大牛们写的自定义编辑框控件,于是找了个时间 ...

  3. MFC工具栏设计

    工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标来表示.当单击某个按钮时,会产生一个相应的消息,对这个消息的处理就是按钮的功能实现.将菜单中常用的功能放置在工具栏中,这样可以方便用户操作,省 ...

  4. OpenCV与MFC实战之图像处理 样本采集小工具制作 c++MFC课程设计

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12111102.html 入门不久的人可以通过opencv实战来锻炼一下学习opencv的成果, ...

  5. MFC-01-Chapter01:Hello,MFC---1.2 MFC简介

    1.2 MFC简介 MFC是Microsoft提供的放置Windows API的面向对象的包装的C++类库.MFC大约封装了好几百个类,其中有一些可以直接调用,有些类可以作为用户自己的类的基类.一些M ...

  6. C++新手之详细介绍MFC

     MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对 ...

  7. C++的MFC,与C#的.NET

    转载:http://blog.sina.com.cn/s/blog_7f5bde5c0101hk5n.html 以下摘自各问答网站.博客论坛: [1]MFC早已过时,现在C++多数是用来编写底层方法而 ...

  8. 评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>

    侯捷的<深入浅出mfc>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了. 而李久进的<mfc深入浅出>,听说的人可能就少得多.原因听说是这本书当时没有怎么宣传,而 ...

  9. 基于VC++的网络扫描器设计与实现

    本文正文其实是自己的毕业论文,现在搬上来有两个原因. 一是之前大学的文档都放在百度网盘上,大概去年的时候百度网盘改版搞得不太稳定,文件夹移动次数一多里边就会有一些文件丢失了,也没有很在意.但前几天看申 ...

随机推荐

  1. Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded.

    EF6进行Insert操作的时候提示错误 Store update, insert, or delete statement affected an unexpected number of rows ...

  2. Scrapy命令和备注

    Scrapy命令和备注 1.创建一个新项目(命令行) project是项目名 scrapy startproject <project_name> 2.调试项目(pycharm) 在pyc ...

  3. JavaWeb项目中文乱码问题

    1.从浏览器读数据乱码(post 请求方式) 前提是前端页面是UTF-8编码,因为服务器端默认采用ISO解码,所以乱码,在读取前加上: request.setCharacterEncoding(&qu ...

  4. cocos2d-X学习之主要类介绍:精灵角色(CCSprite)

    CCSprite是一副2D图像,CCSprite可以通过图像或者图像中的一个矩形子区域创建 如果它的父节点或者任意继承树上的节点是CCspriteBatchNode则具有下述特性: 父节点是CCSpr ...

  5. 160622、详解JavaScript变量提升

    变量在程序中随处可见.它们是一些始终在相互影响,相互作用的的数据和逻辑.正是这些互动使应用程序活了起来. 在JavaScript中使用变量很重要的一方面就是变量的提升 —— 它决定了一个变量何时可以被 ...

  6. Replay attack 回放攻击

    w http://baike.baidu.com/item/重放攻击 重放攻击(Replay Attacks)又称重播攻击.回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一 ...

  7. "零代码”开发B/S企业管理软件之二:怎么创建数据源

    声明:该软件为本人原创作品,多年来一直在使用该软件做项目,软件本身也一直在改善,在增加新的功能.但一个人总是会有很多考虑不周全的地方,希望能找到做同类软件的同行一起探讨. 本人文笔不行,能把意思表达清 ...

  8. 洛谷 P2216 [HAOI2007]理想正方形

    洛谷 巨说这是一道单调队列好题,但是我并不是用单调队列做的诶. 如果往最暴力的方向去想,肯定是\(n^3\)的\(dp\)了. \(f[i][j][k]\)代表当前正方形的左上角定点是\((i,j)\ ...

  9. Calico相关资料链接

    部署calico的两个yaml文件: kubectl apply -f http://docs.projectcalico.org/v2.3/getting-started/kubernetes/in ...

  10. Unity3d 面向对象设计思想(六)(Unity3d网络异步数据)

    在MonoBehavior类中有一个方法是StartCoroutine.里面要求的是一个接口为IEnumerator协同的返回值, 在Unity3d中,协同的作用是马上返回结果的.而不影响其它程序的运 ...