获取系统所有进程

来源:互联网 发布:大数据学术报告点评 编辑:程序博客网 时间:2024/05/26 15:55

Delphi的TlHelp32单元封装了关于进程线程,堆,模块的函数和结构。写代码之前先对几个函数进行一下说明。

CreateToolhelp32Snapshot 函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。也就是各个进程的这些相关信息。函数的申明如下:

TCreateToolhelp32Snapshot = function (dwFlags, th32ProcessID: DWORD): THandle stdcall;(具体参数说明请参看帮助)

TProcessEntry32 结构包含进程的一些信息,定义如下

TProcessEntry32 = tagPROCESSENTRY32W;  
tagPROCESSENTRY32W = record    dwSize: DWORD;        //该记录型的大小,在使用之前必须对它进行初始化    cntUsage: DWORD;      //这个成员一般设置为0    th32ProcessID: DWORD;       // this process PID    th32DefaultHeapID: DWORD;    th32ModuleID: DWORD;        // associated exe    cntThreads: DWORD;         //该进程开启的线程数    th32ParentProcessID: DWORD; // this process's parent process 创建该进程的进程的PID    pcPriClassBase: Longint;    // Base priority of process's threads  线程优先权    dwFlags: DWORD;    szExeFile: array[0..MAX_PATH - 1] of WChar;// Path  该进程可执行文件的名字  end;

Process32First 函数获取系统快照里第一个进程的信息,声明如下:

 TProcess32FirstW = function (hSnapshot: THandle; var lppe: TProcessEntry32W): BOOL stdcall;

hSnapshot为通过CreateToolhelp32Snapshot获取的快照的句柄,lppe是指向TProcessEntry32的一个指针,调用该函数得到的进程信息就存放在lppe指向的记录里

Process32Next 函数获取系统快照里下一个进程的信息,声明同上,一般和上一个函数一起使用。

完整代码如下:

procedure GetSysPro;var     h:thandle;     f:boolean;     lppe:tprocessentry32;begin     h := CreateToolhelp32Snapshot(TH32cs_SnapProcess, 0);     lppe.dwSize := sizeof(lppe);     f := Process32First(h, lppe);     while integer(f) <> 0 do     begin     Memo1.Lines.Add(lppe.szExeFile+'----'+IntToStr(lppe.th32ProcessID));     f := Process32Next(h, lppe);     end;end;

原创粉丝点击