delphi获取Windows系统的进程运行信息
	
    
    
	 delphi获取Windows系统的进程运行信息
自从出现windows系统以来,各种各样的软件层出不穷。购买或者免费下载以后,轻轻点击Install或者Setup以后,稍作些许简单配置就完成安装的整个过程。显然这给用户带来了许多方便,但对用户来说这些软件似乎是个"黑匣子",展现在用户面前的仅仅是华丽的外表和简洁的操作,至于软件运行过程中调用了哪些文件和模块文件就无法知道了。或许真正希望了解这些的用户并不是很多,甚至对某些用户来说是不必要的,但是对于一个系统安全管理员来说这是一件很重要的事情。本文重点阐述如何获取系统的所有进程以及进程运行过程中所调用的模块文件(象EXE、DLL文件),实际是对Windows系统所提供的任务管理器进一步完善,开发工具采用Delphi语言。 
一、函数介绍 
在Windows系统中动态链接库kernel32.dll提供了获取和处理系统进程的许多接口函数,Delphi语言把这些函数接口封装到Tlhelp32.pas中,供Delphi用户开发过程调用。要详细了解相关知识可以查阅Tlhelp32.pas原文件和Windows SDK提供的帮助文件。其中同本文涉及的接口函数主要有CreateToolhelp32Snapshot、process32first、process32next、module32first、module32next五个函数以及TMODULEENTRY32、TPROCESSENTRY32两个数据结构。 
1、CreateToolhelp32Snapshot 
该函数是要实现上述目的最核心的一个函数,它可以获取系统运行进程(Process)列表、线程(Thread)列表和指定运行进程的堆(Heap)列表、调用模块(Module)列表。如果函数运行成功将返回一个非零"Snapshot"句柄,通过该句柄调用相关WinAPI函数就可以实现上述目的,其函数格式为: 
HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, 
DWORD th32ProcessID); 
参数说明: 
dwFlags参数:对函数建立的"Snapshot"所包含的列表类型,可选项包括: 
TH32CS_SNAPHEAPLIST:所创建的Snapshot包含堆列表 
TH32CS_SNAPMODULE :所创建的Snapshot包含调用模块列表 
TH32CS_SNAPTHREAD :所创建的Snapshot包含线程列表; 
TH32CS_SNAPPROCESS :所创建的Snapshot包含进程列表; 
TH32CS_SNAPALL :所创建的Snapshot包含上述所有列表; 
th32ProcessID参数:进程句柄参数,可以为零表示当前进程,该参数只对dwFlags包含TH32CS_SNAPMODULE、TH32CS_SNAPHEAPLIST可选项时起作用。当dwFlags为TH32CS_SNAPPROCESS,th32ProcessID为零时函数得到系统的所有进程列表。 
2、Process32First、Process32Next、
    
     
	
	
    
    
	相关文档:
        
    
    名称 类型 说明   
abort 函数 引起放弃的意外处理   
abs 函数 绝对值函数   
addexitproc 函数 将一过程添加到运行时库的结束过程表中   
addr 函数 返回指定对象的地址   
adjustlinebreaks 函数 将给定字符串的行分隔符调整为cr/lf序列   
align 属 ......
	
    
        
    
    Delphi 与 C/C++ 数据类型对照表 
Delphi数据类型C/C++
ShorInt
8位有符号整数
char
Byte
8位无符号整数
BYTE,unsigned short
SmallInt
16位有符号整数
short
Word
16位无符号整数
unsigned short
Integer,LongInt
32位有符号整数
int,long
Cardinal,LongWord/DWORD
32位无符号整数
unsigned long
Int6 ......
	
    
        
    
                                                       ......
	
    
        
    
    Uses Tlhelp32;
//用Listbox显示方法
procedure TForm1.Button1Click(Sender: TObject);
var
lppe:TProcessEntry32;
found:boolean;
Hand:THandle;
begin
      Hand:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
      lppe.dwSize := Sizeof(lppe); //初始化
      found:=Process32First(Hand,lppe);
      ......