Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi prozessliste unter win NT 4.0 (https://www.delphipraxis.net/5539-prozessliste-unter-win-nt-4-0-a.html)

lordcroc 10. Jun 2003 22:26

Danke Danke funktioniert alles danke für eure Hilfe!!! :hello: :hello: :hello:

Unplugged 14. Apr 2004 15:15

Zitat:

Zitat von Luckie
Delphi-Quellcode:
uses
  PSAPI;

function GetProcessName(PID: DWORD): String;
var
  hProcess: cardinal;
  buffer : array [0..MAX_PATH-1] of Char;
begin
  result := '';
  Zeromemory(@buffer, sizeof(buffer));
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE,
    PID);
  if hProcess <> 0 then
  begin
    GetModulebaseName(hProcess, 0, buffer, sizeof(buffer));
    result := String(buffer);
    CloseHandle(hProcess);
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  pdwResult : PDWORD; // für den Buffer
  pdwWork   : PDWORD; // um dem Buffer verarbeiten zu können
  dwCountIn : DWORD; // Grösse des Buffers in Byte
  dwCountOut : DWORD; // Zurückgelieferte Anzahl Byte
  i         : integer;
begin
  dwCountOut := 0;   // Sicherheitshalber initialisieren, muss nicht sein
  dwCountIn := 1024; // Willkürlich gewählt, genügt für 256 Prozesse
  pdwResult := AllocMem(dwCountIn);
  try
    if not EnumProcesses(pdwResult,dwCountIn,dwCountOut) then begin
      ShowMessage(SysErrorMessage(GetLastError));
    end else begin
      pdwWork := pdwResult; // zur Verarbeitung übergeben, damit FreeMem funktioniert
      for i := 1 to (dwCountOut shr 2) do begin // shr 2 = / 4, da 4 Byte je DWORD
        // Prozess Id ausgeben
        //ShowMessage('ProzessId# '+IntToStr(i)+': '+IntToStr(pdwWork^));
        ShowMessage(GetProcessName(pdwWork^));
        // auf nächste addressieren (inc erhöht automatisch um 4, da es ein typisierter Pointer ist
        inc(pdwWork);
      end;
    end;
  finally
    FreeMem(pdwResult,dwCountIn);
  end;
end;

Hallo!

Grundsätzlich funktioniert diese Prozedur fehlerfrei, jedoch kann es sein, dass es Probleme unter Windows 98 gibt? Einige Nutzer eines meiner Programme meldeten mir einen recht merkwürdigen Fehler und meine Recherche führte zu diesem Teil des Quellcodes.

Thx & Greetz

Luckie 14. Apr 2004 16:33

Re: prozessliste unter win NT 4.0
 
elche Prozedur kommt von mir? Und um an bestimmte Infos zu kommen braucght man Debugg-Rechte.

Unplugged 14. Apr 2004 17:15

Re: prozessliste unter win NT 4.0
 
die hast du doch 2 posts über mir gepostet ...

Da die Prozedur bei mir so läuft, kann ich den Fehler lokal nicht ausfindig machen. Zugang zu dem Rechner des Users, der die Support-Anfrage gestellt hat, hab ich natürlich nicht. Daher wollte ich nur fragen, ob solch ein Problem bekannt ist und es eventuell eine alternative Methode zum Lesen der Prozessliste gibt, die unter allen Windows-Versionen problemlos funktioniert.

toms 14. Apr 2004 17:24

Re: prozessliste unter win NT 4.0
 
PSAPI ist leider nicht auf allen NT4 Distributionen mit dabei.
Dann funktioniert EnumProcesses() nicht.
Es gibt auch die Möglichkeit, die Prozesse aus der Registry auszulesen.
Siehe z.B http://www.madshi.net/enumStuff.zip

Unplugged 14. Apr 2004 17:28

Re: prozessliste unter win NT 4.0
 
danke, ich werde es mal über diese unit implementieren und hoffen, dass es vielleicht auch das Prob mit einigen Win98 Usern behebt.

Luckie 14. Apr 2004 19:29

Re: prozessliste unter win NT 4.0
 
Hallo? Wir reden hier die ganze Zeit davon, dass es die PSAPI nur unter NT gibt, kein Wunder dass es unter 98 nicht geht.

Vjay 14. Apr 2004 21:34

Re: prozessliste unter win NT 4.0
 
CreateToolHelp32SnapShot nur auf Win2000 + 98(etc) glaube ich.
Unter NT ist es wie bereits gesagt EnumProcesses.

Wenn dein Prog unter allen Windows-Versionen laufen soll musst du mit GetVersion das laufende OS bestimmen und die entsprechende Funktion aufrufen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz