AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Prozesse & Handles auslesen

Ein Thema von Leon421 · begonnen am 18. Feb 2010 · letzter Beitrag vom 19. Feb 2010
 
Leon421

Registriert seit: 18. Feb 2010
2 Beiträge
 
Delphi 6 Personal
 
#1

Prozesse & Handles auslesen

  Alt 18. Feb 2010, 13:27
Hi, ich bin auf meiner Suche nach Möglichkeiten, mit Delphi laufende Prozesse auszulesen, auf dieses Forum gestoßen, und habe mehrere Implementationen gefunden.
Alle funktionieren mehr oder weniger gut, die folgende funktioniert in sofern am besten, dass sie öfter als nicht nur die Nutzerprozesse "sieht", und ohne weiteres Filtern eine ziemlich "saubere" Liste liefert.

Versuche ich jedoch, an den Handle heranzukommen (entweder direkt über ProzessHandle, oder über die eingefügte Funktion GetProcessHandleFromID) passiert etwas absonderliches.
Ich erhalte für jede ID das gleiche Handle. Entferne ich eine der fettgedruckten "Closehandle()" zeilen, so erhalte ich für jeden Prozess eine einzigartigen Handle, jedoch scheinen diese Handles zerstört zu werden, da bei der nächsten Iteration alle Handles größer sind als vorher.

Ich bin zwar neu hier, wäre aber trotzdem ausgesprochen dankbar, falls mir Jemand helfen könnte.


Hier ist der Quelltext, mehrere Varianten waren diesem sehr ähnlich. Ich weiss leider nicht mehr, wer der Author dieser Implementation ist.

Code:
procedure DoStuff;

    function GetProcessHandleFromID(ID: DWORD): THandle;
    begin
      result := OpenProcess(SYNCHRONIZE, False, ID);
      [b]CloseHandle(result);[/b]
    end;

    var PrIDs : array [0..1000] of DWORD;
        PrName : array [0..255] of Char;
        Bia : DWORD;
        i, PrCount : Integer;
        ProzessHandle : HWND;
        Modulhandle : HWND;
    begin
    PList:=TStringList.Create;
    HList:=TStringList.Create;
    if EnumProcesses(@PrIDs, SizeOf(PrIDs), bia) then begin
       if (Bia < sizeof(PrIDs)) then begin
          PrCount:=Bia div SizeOf(DWORD);
          for i:=0 to PrCount do begin
              ProzessHandle:=OpenProcess(PROCESS_QUERY_INFORMATION or
                                         PROCESS_VM_READ, False, PrIDs[i]);
              if (ProzessHandle <> 0) then begin
                 EnumProcessModules(ProzessHandle,
                                    @ModulHandle,
                                    SizeOf(modulhandle),
                                    Bia);
                 GetModuleFilenameEx(Prozesshandle,
                                     ModulHandle,
                                     PrName,
                                     SizeOf(PrName));
                 PList.Add(ExtractFileName(PrName));
                 HList.Add(IntToStr(GetProcesshandleFromID(PrIDs[i])));

                [b] CloseHandle(ProzessHandle);[/b]
              end;
          end; {for i}
       end else begin
          MessageDlg('PrID-Array zu klein', mtError, [mbOk], 0)
       end;
    end else begin
       RaiseLastOSError();
    end;
   end;
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz