Cette fonction, avec la valeur 0 renvoie le nb de process actifs
Avec une valeur comprise entre 1 et le nb de processus, les énumerrent et renvoie le chemin ou le nom d' un de ces processus.
Sinon, rien.
Source / Exemple :
Private Declare Function _
CloseHandle Lib "Kernel32.dll" (ByVal _
Handle As Long) As Long
Private Declare Function _
OpenProcess Lib "Kernel32.dll" (ByVal _
dwDesiredAccessas As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcId As Long) As Long
Private Declare Function _
EnumProcesses Lib "PSAPI.DLL" (ByRef _
lpidProcess As Long, ByVal cb As Long, _
ByRef cbNeeded As Long) As Long
Private Declare Function _
GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal _
bhProcess As Long, _
ByVal hModule As Long, ByVal _
ModuleName As String, _
ByVal nSize As Long) As Long
Private Declare Function _
EnumProcessModules Lib "PSAPI.DLL" (ByVal _
hProcess As Long, ByRef _
lphModule As Long, ByVal cb As Long, ByRef _
cbNeeded As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16
Private Const MAX_PATH = 260
Private Type PROCESS_MEMORY_COUNTERS
cb As Long
PageFaultCount As Long
PeakWorkingSetSize As Long
WorkingSetSize As Long
QuotaPeakPagedPoolUsage As Long
QuotaPagedPoolUsage As Long
QuotaPeakNonPagedPoolUsage As Long
QuotaNonPagedPoolUsage As Long
PagefileUsage As Long
PeakPagefileUsage As Long
End Type
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long ' Le processus
th32DefaultHeapID As Long
th32ModuleID As Long ' exe associé
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
Private Function Processus(ByVal _
ID As Integer) As String
On Error Resume Next
Dim booResult As Boolean
Dim lngLength As Long
Dim lngProcessID As Long
Dim strProcessName As String
Dim lngSnapHwnd As Long
Dim udtProcEntry As PROCESSENTRY32
Dim lngCBSize As Long
Dim lngCBSizeReturned As Long
Dim lngNumElements As Long
Dim lngProcessIDs() As Long
Dim lngCBSize2 As Long
Dim lngModules(1 To 200) As Long
Dim lngReturn As Long
Dim strModuleName As String
Dim lngSize As Long
Dim lngHwndProcess As Long
Dim lngLoop As Long
Dim pmc As PROCESS_MEMORY_COUNTERS
Dim strProcName, strProcName2 As String
Dim NbProc, ListeProc(1 To 10000) As String
NbProc = 0
booResult = False
' nom de Explorer
EXEName = "explorer.exe"
EXEName = UCase$(Trim$(EXEName))
lngLength = Len(EXEName)
lngCBSize = 8
lngCBSizeReturned = 96
Do While lngCBSize <= lngCBSizeReturned
DoEvents
'Incremente la taille
lngCBSize = lngCBSize * 2
'Loue la mémoire
ReDim lngProcessIDs(lngCBSize / 4) As Long
'Prends l' ID du processus
lngReturn = EnumProcesses(lngProcessIDs(1), lngCBSize, lngCBSizeReturned)
Loop
'Compte les processus
lngNumElements = lngCBSizeReturned / 4
For lngLoop = 1 To lngNumElements
DoEvents
'Donne le handle du processus et l' ouvre
lngHwndProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lngProcessIDs(lngLoop))
If lngHwndProcess <> 0 Then
lngReturn = EnumProcessModules(lngHwndProcess, lngModules(1), 200, lngCBSize2)
If lngReturn <> 0 Then
NbProc = NbProc + 1
strModuleName = Space(MAX_PATH)
lngSize = 500
'Prend le nom du processus
lngReturn = GetModuleFileNameExA(lngHwndProcess, lngModules(1), strModuleName, lngSize)
'Enlève les espaces
strProcessName = Left(strModuleName, lngReturn)
ListeProc(NbProc) = strProcessName
End If
End If
'Ferme les handles du processus
lngReturn = CloseHandle(lngHwndProcess)
DoEvents
Next
If ID = 0 Then
Processus = NbProc
ElseIf ID > 0 And ID <= NbProc Then
Processus = ListeProc(ID)
Else
Processus = ""
End If
End Function
Sub Form_Load() 'pour l' appeller
'Si i=0 --> variable= nombre de procesus
'Sinon --> variable= nom ou chemin d' accès du processus "i"
variable = Processus(i)
MsgBox (variable)
End Sub
Conclusion :
Je l' ai testé sous Win XP. Il parait que çà marche pas sous Win9x.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.