• 模拟任务资源管理器的小程序


    一 . 新建基于对话框的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():计算字符串的长度,以'为字符串结束标记。
    sizeof() :计算的则是分配的数组所占的内存空间的大小,不受里面存储的内容影响

    区别:
    1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 
    该类型保证能容纳实现所建立的最大对象的字节大小
    2.sizeof是算符,strlen是函数。
    3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''''结尾的。 
    sizeof还可以用函数做参数为函数的返回类型所占的空间大小。函数的返回类型不能是void。
    4.数组做sizeof的参数不退化,传递给strlen就退化为指针了
    5.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数
    6.sizeof在编译的时候计算过了
     
  • 相关阅读:
    管理心理学[9095]
    汽车文化[1196]
    小四轴——空心杯电机引起的电源干扰
    38 时序电路扩展2
    37 时序电路扩展1
    36 时序电路的动态特性分析2
    35 时序电路的动态特性分析1
    34 同步时序电路的设计方法2
    33 同步时序电路的设计方法1
    60. 第k个排列
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8378403.html
Copyright © 2020-2023  润新知