var
  PE : ProcessEntry32 ;
  h1 : THandle ;
begin
  H1 :=  CreateToolhelp32Snapshot( TH32CS_SNAPHEAPLIST and
                                   TH32CS_SNAPPROCESS  and
                                   TH32CS_SNAPTHREAD   and
                                   TH32CS_SNAPMODULE ,0 );
  if h1 = -1 then
    begin
const
  TH32CS_SNAPHEAPLIST   = $1 ;
  TH32CS_SNAPPROCESS    = $2 ;
  TH32CS_SNAPTHREAD     = $4 ;
  TH32CS_SNAPMODULE     = $8  ;type
  LPPROCESSENTRY32 = ^ PROCESSENTRY32 ;
  PROCESSENTRY32  = Record
         dwSize : DWORD ;
         cntUsage : DWORD ;
         th32ProcessID : DWORD ;
         th32DefaultHeapID : DWORD ;
         th32ModuleID : DWORD ;
         cntThreads : DWORD ;
         th32ParentProcessID : DWORD ;
         pcPriClassBase : DWord ;
         dwFlags : DWORD ;
         szExeFile : Array[0..MAX_PATH-1 ] of Char  ;
     end;
.....
...
     memoLog.Lines.Add('Fail to CreateToolHelp32Snapshot') ;
     CloseHandle(h1);
     Exit;
    end;
   memoLog.Lines.Add('success to open');
   pe.dwSize := SizeOf(ProcessEntry32);
   if Process32First(h1,@pe) = False then
    begin
      memoLog.Lines.Add('Fail to use Process32First ! ') ;
    end;  closeHandle(h1);

解决方案 »

  1.   

    function GetProcessIDList(const AFilename: string; const PathMatch: Boolean): TPIDList;
    ar
      lppe: TProcessEntry32;
      SsHandle: Thandle;
      FoundAProc, FoundOK: boolean;
    begin
      Result := TPIDList.Create;
      SsHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
      lppe.dwSize := SizeOf(TProcessEntry32);
      FoundAProc := Process32First(Sshandle, lppe);
      while FoundAProc do
      begin
        if lppe.th32ProcessID > 0 then
        begin
          if AFilename = '' then Result.Add(lppe.th32ProcessID) else
          begin
            if PathMatch
              then FoundOK := AnsiStriComp(lppe.szExefile, PChar(AFilename)) = 0
            else FoundOK := AnsiStriComp(PChar(ExtractFilename(lppe.szExefile)), PChar(ExtractFilename(AFilename))) = 0;
            if FoundOK then Result.Add(lppe.th32ProcessID);
          end;
        end;
        FoundAProc := Process32Next(SsHandle, lppe);
      end;
    // if not FoundAProc then showmessage(SysErrorMessage(GetLastError));
      CloseHandle(SsHandle);
    end;
      

  2.   

    CreateToolhelp32Snapshot( TH32CS_SNAPHEAPLIST and
                                       TH32CS_SNAPPROCESS  and
                                       TH32CS_SNAPTHREAD   and
                                       TH32CS_SNAPMODULE ,0 );昏~~~~应该用or
      

  3.   

    var Snap : THandle;
        PPro : PProcessEntry32;Snap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
    New(PPro);
    if Process32First(Snap,PPro^) then或者声明 ppro:TProcessEntry32,然后直接写参数即可
    if Process32First(Snap,PPro) then