关于获取进程信息(完整+经验+总结)

最近写了一个进程管理的程序,下面是对这次编程的总结和笔记:
、关于进程的枚举获取:
距我所知,枚举进程总共有4种方法,也包括四种不同的库,我采用用了前面的三种来获取进程的详细信息,当然是对自己关心的信息。
它们分别采用了:
包含库: psapi.lib WtsApi32.lib;
头文件: #include <TLHELP32.H>,#include <WtsApi32.h>,#include <psapi.h>;
 
还有一种方法是由ntdll.dll提供的函数来获取进程信息的,我没有采用,因为前面的三种方法一起能获取很多的进程信息了,对我来说已经够了。
另外为了方便我也写了一个进程管理的类,把相应的功能封装在一起。
主要的技术有:
1.权限的提升:
 

 
 
其中涉及到几个API函数,是在编写系统相关函数常用到的,看代码应该能理解了。
 
2.为了获得自己感兴趣的信息,定义了两个结构体,把他们分开也是为了方便管理,因为有的信息不可能是同一块获得的。
 

 
 
获得相关信息的代码如下:
 

 
其中大量使用了动态分配内存,主要是为了尽可能地有效利用内存,经过两天的测试,这个类没有任何内存泄露。
 
3.动态分配内存的释放:
 

 
 
其中内存是分别释放的,我也没办法,而且这里必须注意内存释放问题:
如果结构体本身是new出来的,但是里面的内容也含有new出来的数据、指针什么的,必须先将里面的释放完了再把结构体所占的内存释放掉!!
 
4.由于NT遗留下来的问题,进程的路径获得中会出现一些小问题:
 

 
 
5.通过进程ID获得进程窗口的句柄:
 

6.获得进程的命令行:


 
7.获得进程所调用的模块信息:
 

 
8.获得创建进程的用户名:
 

 
以上是获得进程信息的一些技术,下面是其他的一些技术,有的是我的原创。
 
 
 
二、关于TabCtrl的另类利用:
 
上面是实现后的效果,按钮放在左边,按不同的按钮出现不同的对话框在右面,有人说那是OutLook风格,我不知道,总之这样看起来比属性表更好看,管理起来也更方面,相关的代码如下。
 

 
其中CMyTabSheet是从管理控件TabCtrl的类派生的,其实那个管理对话框的TabCtrl控件被前面的对话框遮住了,呵呵。
三、关于弹出菜单:

 
 
弹出菜单的三个三钮分别对应三个功能:复制文件的路径到剪贴板、打开文件所在的文件夹并选中文件、关掉进程。
其中复制文件的路径到剪贴板的代码如下:
 

 
关掉进程的代码为:

 
其实这种关进程的方法不太好,因为这是强制行的,很容易造成数据丢失以及其他问题,有时间的话我会改进一下。
 
打开文件所在的文件夹并选中文件的代码如下:
 

 
四、在列表框中显示数据的代码如下,我觉得有必要写下来,其中最重要的是图标的输出问题:
 

 
五、另外还定义了一些全局的函数:
 

 
就写这么多笔记了,如果还有什么的我下次再写,我想写的一个小软件还没完成,进程管理只是其中的一个部分。
另外我还写了一个获取文件版本信息的类,恩,主要的一些代码如下:
 

Leave a Reply

Your email address will not be published.