Announcement

Collapse
No announcement yet.

Handles von fremden Prozessen (PView)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Handles von fremden Prozessen (PView)

    Hallo zusammen!

    Ich hätte gern eine Liste aller im System laufenden Prozesse (wie im Taskmanager), möglichst mit Prozeßnamen und Applikationsnamen sowie den dazugehörigen Handles. Soweit ich GetCurrentProcess verstehe, bekomme ich darüber ja nur ein Handle auf den eigenen Process, oder?

    Gruß, Daemor

  • #2
    Hallo,

    unter Windows NT steht der nachinstallierbare <b>Process Status Helper</b> (PSAPI.DLL) zur Verfügung, so daß eine Anwendung die API-Funktion <b>EnumProcesses</b> aufrufen kann:

    <pre>
    uses Psapi;
    procedure TForm1.Button2Click(Sender: TObject);
    var
    i : Integer;
    pidNeeded : DWORD;
    PIDList : array[0..1000] of Integer; // Obergrenze !!!
    PIDName : array [0..MAX_PATH - 1] of char;
    PH : THandle;
    begin
    if not Psapi.EnumProcesses(@PIDList, 1000, pidNeeded) then
    raise Exception.Create('PSAPI.DLL ist nicht vorhanden!');
    for i := 0 to (pidNeeded div sizeof (Integer)- 1) do
    begin
    PH := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
    False, PIDList[i]);
    if PH <> 0 then
    begin
    if Psapi.GetModuleBaseName(PH, 0, PIDName, sizeof (PIDName)) > 0 then
    begin
    ListBox1.Items.Add('process : ' + PIDName);
    CloseHandle(PH);
    end;
    end;
    end;
    end;
    </pre>
    Für Windows 9x steht der Process Status Helper nicht zur Verfügung, so daß man dort auf die Funktionen aus <b>ToolHelp32</b> zurückgreifen muss:
    <pre>
    var
    Snapshot : THandle;
    Process : TProcessEntry32;
    begin
    Snapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if Process32First(Snapshot, Process) then begin
    repeat
    // Processinfo auswerten (z.Bsp. Snapshot.szExeFile)
    until NOT Process32Next(Snapshot, Process) ;
    end;
    CloseHandle(Snapshot);
    end;
    </pre>

    Weitere Infos finden sich in dem Beitrag <i>"Prozesse (Win95/NT) erkennen, welche laufen"</i> im Delphi-Ordner <i>Diverses</i>

    Comment


    • #3
      Vielen Dank Her Kosch,
      keiner meiner Informatiklehrer konnte mir bei dem Problem weiterhelfen.

      Gruß,
      Leonhard

      Comment


      • #4
        oder mit GetNextWindow alle fenster anzeigen lassen und dann mit getthreadprocessID das handle des Prozesses und mit getwindowText die Caption des Fenster

        Comment

        Working...
        X