得到所有进程ID的文章很多,GetCurrentProcess()只能得到当前process的Handle,如何得到所有进程的handle,请朋友们帮帮忙!!

解决方案 »

  1.   

    ZwQuerySystemInformation
    系统的所有Handle都可以获取!但这个API却不是容易用的,需要一点NTDDK的知识http://lysoft.7u7.net
      

  2.   

    http://www.xfocus.net/articles/200406/706.html
      

  3.   

    windows SDK
    里有一类API叫做 Tool Help
    你可以试试看
      

  4.   

    uses
      Windows, SysUtils, Classes, TLHelp32, StrUtils;type
      TProcessInfo  = class
      private
        FHandle: HWND;
        FName: string;
        FFileName: string;
        FDescription: string;
      public
        property Name  : string read FName;
        property Handle : HWND read FHandle;
        property FileName : string read FFileName;
        property Description : string read FDescription;
      end;procedure EnumProcess;
    var
      p               : TProcessInfo;
      ContinueLoop    : BOOL;
      FSnapshotHandle : THandle;
      FProcessEntry32 : TProcessEntry32;
    begin
      FSnapshotHandle         :=  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      try
        FProcessEntry32.dwSize  :=  Sizeof(FProcessEntry32);
        ContinueLoop            :=  Process32First(FSnapshotHandle, FProcessEntry32);
        while integer(ContinueLoop)<>0 do
        begin
          p :=  TProcessInfo.Create;
          p.FHandle   :=  FProcessEntry32.th32ProcessID;
          p.FName     :=  FProcessEntry32.szExeFile;
          ContinueLoop  :=  Process32Next(FSnapshotHandle, FProcessEntry32);
        end;
      finally
        CloseHandle(FSnapshotHandle);
      end;
    end;
      

  5.   

    大哥,这样也不对啊,我用getCurrentProcess得出来的进程显示出来是一个没有数字0的八位数,而用上面的方法列出来的是三位数或四位数,根本就不一样,帮忙哦
      

  6.   

    你不试试怎么知道不对呢?
    用TerminateProcess函数结束进程试试就知道是不是正确的了