' ---------------------------------------------
' Declarations API
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Const PROCESS_VM_READ As Long = (&H10)
Public Const PROCESS_QUERY_INFORMATION As Long = (&H400)
' Pour NT/2000/XP/2003... seulement
Public Declare Function GetModuleFileNameEx Lib "psapi.dll" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef lpcbNeeded As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const MAX_PATH As Integer = 260
' ---------------------------------------------
' Renvoie le chemin complet du processus
' ---------------------------------------------
' Parametre
' ProcessID : ID du processus
' ---------------------------------------------
Public Function GetProcessFileName(ByVal ProcessID As Long) As String
On Error GoTo Fin
' Processus 0
If ProcessID = 0 Then
GetProcessFileName = "[System Process]"
' Processus 4
ElseIf ProcessID = 4 Then
GetProcessFileName = "System"
Else
' On cherche son chemin d'accès complet
Dim hProcess As Long 'handle du processus
Dim hModule As Long 'handle du module de l'exe
Dim Ret As Long 'résultat
' On demande un handle pour le processus
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0&, ProcessID)
' Si erreur (accès refusé)
If hProcess = 0 Then GoTo Fin
' On préformate la chaine
GetProcessFileName = Space(MAX_PATH)
' On récupère son nom complet
GetModuleFileNameEx hProcess, 0, GetProcessFileName, MAX_PATH
' On ferme le handle ouvert
CloseHandle hProcess
' On retire le vbNUllChar de fin de chaine
GetProcessFileName = Left(GetProcessFileName, InStr(GetProcessFileName, vbNullChar) - 1)
End If
Exit Function
Fin:
GetProcessFileName = vbNullString
End Function
04/11/2006 : Modif du titre
Le 11/04/2007 par MadMatt : Optimisation
Seul les admins et l'auteur du code lui même peuvent modifier ce code.