一 . 新建基于对话框的MFC项目
在对话框上添加ListCtrl控件 , 右键添加变量 , 在OnInitDialog中初始化
MylistCtrl.InsertColumn(0,_T("Name"),0,100); MylistCtrl.InsertColumn(1,_T("ProcessID"),0,100); MylistCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);//点击任意列可选中一行 GetProcess();
二 . 获得每个进程信息
获取系统中正在运行的进程信息 :CreateToolhelp32Snapshot
获得运行的进程链表的首部 :Process32First
获得运行的进程链表的下一个 :Process32Next
通配符:_T() 和 TCHAR:
当为Unicode字符集(即宽字符集)的时候,变量为L" "和 char;
当为多字节字符集的时候,变量为" " 和 wchar
void CProcessDlg::GetProcess(){ PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32); HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(handle == INVALID_HANDLE_VALUE) return; BOOL bflag = Process32First(handle,&pe32); CString str; while(bflag) { str.Format(_T("%d"),pe32.th32ProcessID);//将数字转换成字符串 MylistCtrl.InsertItem(0,pe32.szExeFile);//向每一行中插入进程名 MylistCtrl.SetItemText(0,1,str);//向每一行的第二列中插入进程序号 bflag = Process32Next(handle,&pe32); }}
三 . 当点击结束按钮的功能函数
1.获得选中项 :(索引)GetSelectionMark() , (文本)GetItemText()
2.获得句柄 :OpenProcess()
3.杀死进程 :TerminateProcess()
void CProcessDlg::OnBnClickedButton1(){ //1.获得选中项 int index; CString str; index = MylistCtrl.GetSelectionMark(); if(index != -1)//获取索引成功 str = MylistCtrl.GetItemText(index , 1);//index为文本将检索项的索引。1为指定文本要检索的子项 //2.获得句柄 HANDLE h_process = OpenProcess(PROCESS_TERMINATE ,FALSE ,_ttoi(str));//将CString转换为int int n = GetLastError();//取得上一个函数操作时所产生的错误代码。 if(h_process) { TerminateProcess(h_process,-1);//第二个参数为发给操作系统的退出码 MylistCtrl.DeleteItem(index);//从listctrl中删除 }}
GetLastError()函数返回的错误值可以在:工具->错误查找中输入错误码查找错误 小知识点: strlen() 和 sizeof() char* p = "abcde"; 5 4 char p[10] = "abcde"; 5 10 char p[] = "abcde"; 5 6 strlen():计算字符串的长度,以\0'为字符串结束标记。 sizeof() :计算的则是分配的数组所占的内存空间的大小,不受里面存储的内容影响 区别: 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。 sizeof还可以用函数做参数为函数的返回类型所占的空间大小。函数的返回类型不能是void。 4.数组做sizeof的参数不退化,传递给strlen就退化为指针了 5.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数 6.sizeof在编译的时候计算过了