![]() |
Moin Lordroc,
das sollte so gehen:
Delphi-Quellcode:
Die Beschreibung der API Funktionen erhältst Du ansonsten aus dem PSDK (kann heruntergeladen werden) oder online bei msdn.micorsoft.com.
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^)); // 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; |
Hi,
ich hatte mal irgendwann diese Prozedur gefunden. Weiss leider nicht mehr von wem die ist, würd den Autor sonst natürlich erwähnen. Klappt hervorragend.
Code:
uses tlhelp32 ;
procedure SnapShot(var sl: TStringlist); var hProcSnap: THandle; pe32: TProcessEntry32; begin hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); if hProcSnap = INVALID_HANDLE_VALUE then exit; pe32.dwSize := SizeOf(ProcessEntry32); if Process32First(hProcSnap, pe32) = true then begin while Process32Next(hProcSnap, pe32) = true do begin sl.Add(pe32.szExeFile); end; end; end; |
Super das funktioniert schon mal! :D :D :D :D :D
gibts jetzt auch die möglichkeit den Name des Prozesses herauszufinden z.b. svchost.exe spoolsv.exe winlogon.exe ?????? |
moin jelly,
die Prozedur kommt von luckie und sie funktioniert unter NT 4.0 nicht aus irgend welchen gründen auch immer! |
Zitat:
Gruss, tom |
Sie funktioniert deswegen nicht unter NT, weil unter NT4.0 es keine Tlhelp32.dll gibt. Microsoft hat damals für NT4 alles neu implementiert und diese Funktionen in die PSAPI gesteckt - aus was für einen Grund auch immer.
|
typisch MS nix wird vernünftig gemacht!
|
Sie werden schon ihre Gründe gehabt haben. Schließlich wollten sie mit NT ja die DOS-Altlasten los werden. Und da hat eben nichts an einer Neuimplementierung vorbei geführt.
|
kannst du mir zufällig helfen den Code von "Christian Seehase" so zu erweitern, dass ich die Prozessnamen erhalte? ich kapiere nähmlich nicht viel von Api's.
|
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 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