+ Reply to Thread
Results 1 to 2 of 2

Thread: Process List

  1. #1
    Senior Member WEZ_2511's Avatar
    Join Date
    Aug 2005
    Posts
    1,459

    Process List

    Code:
     uses
      PSAPI, TlHelp32;
    
    function GetProcessName(PID: DWORD; var ProcessName: string): DWORD;
    var
      dwReturn     : DWORD;
      hProc        : Cardinal;
      buffer       : array[0..MAX_PATH - 1] of Char;
    begin
      dwReturn := 0;
      Zeromemory(@buffer, sizeof(buffer));
      hProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, PID);
      if hProc <> 0 then
      begin
        GetModulebaseName(hProc, 0, buffer, sizeof(buffer));
        ProcessName := (string(buffer));
        CloseHandle(hProc);
      end
      else
        dwReturn := GetLastError;
      result := dwReturn;
    end;
    
    type
      TPIDList = array of DWORD;
    
    function GetProcessList(var ProcessList: TPIDList): DWORD;
    
      function GetOSVersionInfo(var Info: TOSVersionInfo): Boolean;
      begin
        FillChar(Info, SizeOf(TOSVersionInfo), 0);
        Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
        Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
        if (not Result) then
        begin
          FillChar(Info, SizeOf(TOSVersionInfo), 0);
          Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
          Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
          if (not Result) then
            Info.dwOSVersionInfoSize := 0;
        end;
      end;
    
    var
      dwReturn     : DWORD;
      OS           : TOSVersionInfo;
      // EnumProcesses
      PidProcesses : PDWORD;
      PidWork      : PDWORD;
      BufferSize   : Cardinal;
      Needed       : DWORD;
      cntProcesses : Cardinal;
      i            : Cardinal;
      // CreateToolhelp32Snapshot
      hProcSnapShot: THandle;
      pe32         : TProcessEntry32;
      j            : Cardinal;
    
    begin
      dwReturn := 0;
      // What OS are we running on?
      if GetOSVersionInfo(OS) then
      begin
        if (OS.dwPlatformId = VER_PLATFORM_WIN32_NT) and (OS.dwMajorVersion = 4) then
        // WinNT and higher
        begin
          Needed := 0;
          BufferSize := 1024;
          GetMem(PidProcesses, BufferSize);
          // make sure memory is allocated
          if Assigned(PidProcesses) then
          begin
            try
              // enumerate the processes
              if EnumProcesses(PidProcesses, BufferSize, Needed) then
              begin
                dwReturn := 0;
                cntProcesses := Needed div sizeof(DWORD) - 1;
                PidWork := PidProcesses;
                setlength(ProcessList, cntProcesses);
                // walk the processes
                for i := 0 to cntProcesses - 1 do
                begin
                  ProcessList[i] := PidWork^;
                  Inc(PidWork);
                end;
              end
              else // EnumProcesses = False
                dwReturn := GetLastError;
            finally
              // clean up no matter what happend
              FreeMem(PidProcesses, BufferSize);
            end;
          end
          else // GetMem = nil
            dwReturn := GetLastError;
        end
        // Win 9x and higher except WinNT
        else
        begin
          // make the snapshot
          hProcSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
          if hProcSnapShot <> INVALID_HANDLE_VALUE then
          begin
            pe32.dwSize := sizeof(TProcessEntry32);
            j := 0;
            setlength(ProcessList, j + 1);
            if Process32First(hProcSnapShot, pe32) then
            begin
              // first process
              ProcessList[j] := pe32.th32ProcessID;
              // walk the processes
              while Process32Next(hProcSnapShot, pe32) do
              begin
                Inc(j);
                setlength(ProcessList, j + 1);
                ProcessList[j] := pe32.th32ProcessID;
              end;
            end
            else // Process32First = False
              dwReturn := GetLastError;
            CloseHandle(hProcSnapShot);
          end
          else // hSnapShot = INVALID_HANDLE_VALUE
            dwReturn := GetLastError;
        end;
      end;
      result := dwReturn;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      retValue     : DWORD;
      ProcessList  : TPIDList;
      i            : Integer;
      ProcessName  : string;
      PID          : DWORD;
    resourcestring
      rsUnknown    = 'unbekannt';
    begin
      // VCL causes last error to be set, even nothing has already happend :-/
      SetLastError(0);
      retValue := GetProcessList(ProcessList);
      if retValue = 0 then
      begin
        for i := 0 to length(ProcessList) - 1 do
        begin
          PID := ProcessList[i];
          if GetProcessName(ProcessList[i], ProcessName) <> 0 then
            ProcessName := rsUnknown;
          Listbox1.Items.Add(IntToStr(PID) + ' - ' + ProcessName);
        end;
      end
      else
        ShowMessage(SysErrorMessage(retValue));
    end;
    credit :Michael Puff
    source : Prozessliste erstellen

  2. #2
    Member Sav1or's Avatar
    Join Date
    Oct 2007
    Location
    Russia,Moscow
    Posts
    52
    There are another methods to get process list.
    you can see process list with the help of:
    ZwQuerySystemInformation (Informationclass 5)
    parse the EPROCESS

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. List Processes
    By Dark Angel in forum General Programming Help
    Replies: 11
    Last Post: 22-06-2008, 15:39
  2. List Conexctions?
    By boss_triller in forum Delphi Help
    Replies: 2
    Last Post: 10-08-2007, 07:17
  3. Need help With sending a list?
    By -ToRtUgA- in forum Visual Basic Help
    Replies: 3
    Last Post: 22-12-2006, 22:35
  4. AV/FW Kill List
    By drkdreams in forum General Programming Help
    Replies: 7
    Last Post: 01-12-2005, 05:06
  5. App startup list
    By Snma in forum Off-Topic
    Replies: 3
    Last Post: 07-08-2005, 20:00

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 ©2011, Crawlability, Inc.