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

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. Plist文件介绍

    开发IOS遇到数据,这里专门做frame sprite数据说明 plist plist是property list的缩写.plist中包括一些命名值和使用Core  Foundation类型创建的值的 ...

  2. ZOJ 3490 String Successor(模拟)

    Time Limit: 2 Seconds Memory Limit: 65536 KB The successor to a string can be calculated by applying ...

  3. Windows File 管理工具:junction And Subinacl

    junction.exe   是 Sysinternals 出品的命令行工具.使用前建议将其复制到%SystemRoot%/system32目录下 创建一个名为 D:/LINK 的[junction ...

  4. Quest Active Directory

    Get-QADGroupMember命令是Quest Active Directory的命令,必须安装如下包才能使用! 电脑路径: D:\soft\AD\Quest_Quest-One-ActiveR ...

  5. paper reading:gaze tracking

    https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Krafka_Eye_Tracking_for_CVPR_2016_ ...

  6. WTForms In Flask(WTForms在Flask中的应用)

    WTForms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装wtforms : pip3/pip install wtforms 用户登录/注册示例 项 ...

  7. Python(数据库安装与基本语句)

    一.数据库相关概念 1.两种硬件扩展方式 a.垂直扩展:针对一台计算机 b.水平扩展:多台普通计算机 2.数据库相关概念 数据库服务器(本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端) ...

  8. Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用

    一.服务器核心知识 1.电脑和电脑的硬件组成 现在的人们几乎无时无刻不在使用着电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑,还是智慧型手机等等,这些东西都算是电脑.虽然接触这么多,但是 ...

  9. Window mysql 安装配置

    1.下载 安装包 mysql-noinstall--winx64.zip 2.解压缩zip包 安装路径 C:\Program Files\MySQL\mysql--winx64 3.配置环境变量 添加 ...

  10. 词性标注算法之CLAWS算法和VOLSUNGA算法

    背景知识 词性标注:将句子中兼类词的词性根据上下文唯一地确定下来. 一.基于规则的词性标注方法 1.原理 利用事先制定好的规则对具有多个词性的词进行消歧,最后保留一个正确的词性. 2.步骤 ①对词性歧 ...