枚举所有运行的程序或进程。

解决方案 »

  1.   

    其实很简单,就是几个api反复调用的问题,什么getnext(),不过我现在忘了,
      

  2.   

    为什么不找一找以前的帖子呢,这东西有很多的var 
        Snap : THandle;
        PPro : PProcessEntry32;
    begin
      Snap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
      New(PPro);
      PPro^.dwSize := SizeOf(TProcessEntry32);
      if Process32First(Snap,PPro^) then begin
        Repeat
          New(aPP);
          with ListView1.Items.Add do begin
            Caption := PPro^.szExeFile;
            SubItems.Add(Format('%.8x',[PPro^.th32ProcessID]));
            SubItems.Add(Inttostr(PPro^.cntThreads));
            SubItems.Add(Format('%.8x',[PPro^.th32ParentProcessID]));
            SubItems.Add(Format('%.8x',[PPro^.pcPriClassBase]));
          end;
        until NOT Process32Next(Snap,PPro^)
      end;
      Dispose(PPro);
    end;
      

  3.   

    楼上高人写的代码很清楚了,我将几个函数和数据结构补充一下:
    创建快照函数CreateToolhelp32Snapshot
    function CreateToolhelp32Snapshot(
    dwFlags:DWORD, // 要得到进程的信息,赋为TH32CS_SNAPPROCESS
                   // 要得到线程的信息,赋为TH32CS_SNAPTHREAD
                   // 要得到指定进程的堆列表,赋为TH32CS_SNAPHEAPLIST
                   // 要得到指定进程的模块列表,赋为TH32CS_SNAPMODULE
    th32ProcessID: DWORD // 当我们把dwFlags赋为TH32CS_SNAPMODULE 或者
                         // TH32CS_SNAPHEAPLIST时,需要指定具体的进程ID,否则
                         // 将忽略此参数。把它赋为0表示当前进程(也就是自己)
    ): THandle; // 返回值THandle将在以后要枚举进程、线程等对象时使用tagPROCESSENTRY32 = packed record
    dwSize: DWORD;   // 指定结构的大小,
                     // 在调用Process32First前需要设置,否则将会失败
    cntUsage: DWORD; // 引用计数
    th32ProcessID: DWORD;     // 进程号
    th32DefaultHeapID: DWORD; // 进程的堆号,只对Toolhelp函数有意义,并不是一个有效句柄
    th32ModuleID: DWORD;      // 进程的模块号,只对Toolhelp函数有意义,并不是一个有效句柄
    cntThreads: DWORD;        // 进程中包括的线程数
    th32ParentProcessID: DWORD; // 进程的母进程
    pcPriClassBase: Longint;    // 进程的线程的基优先级,所有此进程创建的线程将基于此优先级
    dwFlags: DWORD;             // 保留,没有使用
    szExeFile: array[0..MAX_PATH - 1] of Char; // 进程所对应的文件及路径
    end;
    TProcessEntry32 = tagPROCESSENTRY32;function Process32First(
      hSnapshot: THandle;       // 前面由CreateToolhelp32Snapshot创建的快照句柄
      var lppe: TProcessEntry32 //函数输出进程信息
      ): BOOL;                  //调用成功将为True,否则为False
    function Process32Next(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;
      

  4.   

    哦,是的...当然,你要 uses TlHelp32......