NOTES :
La librairie ToolHelp n'est pas disponible sous Windows NT4, cette méthode permet de pallier à ce problème et obtenir la liste des process sous NT.
Cette procédure fonctionne aussi avec Windows 2000 et Windows XP.
CODE :
Procedure TForm1.FormActivate(Sender: TObject); Var
PIDArray: Array[0..1023] Of DWORD;
cb: DWORD;
I,
ProcCount: Integer;
hMod: HMODULE;
hProcess: THandle;
ModuleName: Array[0..300] Of Char; Begin // Effacement de la liste
Liste.Clear;
// Recupération de la liste de tous les processus sous NT4
EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
ProcCount := cb Div SizeOf(DWORD); For I := 0 To ProcCount - 1 Do Begin If PIDArray[I] = 0 Then ModuleName := '[Idle]' Else Begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, False, PIDArray[I]); If (hProcess <> 0) Then Begin
EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
FillChar(ModuleName, 300, 0);
ModuleName := 'System';
GetModuleBaseName(hProcess, hMod, ModuleName, SizeOf(ModuleName));
CloseHandle(hProcess); End Else ModuleName := 'Erreur'; End;
With Liste.Items.Add Do Begin // Affichage de chaque process
Caption:=IntToHex(PIDArray[I],8);
SubItems.Add(ModuleName);
// Data va conserver le ProcessID afin de pouvoir // en demander la fermeture par la suite
Data:=Pointer(PIDArray[I]); End; End; End;