Récupérer le chemin d'accès complet du fichier d'un processus


Propriétés du code


Date de création : 04/11/2006 à 16:08:00
1 Commentaire(s)
  MadMatt

 

Présentation


Cette fonction renvoie le chemin d'accès complet vers le fichier correspondant à l'exécutable du processus.

 

Code


' ---------------------------------------------
' 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


 

Historique


Voici l'historique des modifications de ce code :
04/11/2006 : Modif du titre
Le 11/04/2007 par MadMatt : Optimisation

 
 

Modifier le code

Seul les admins et l'auteur du code lui même peuvent modifier ce code.

 

Commentaires


De sebdraluorg le 12/11/2006 à 20:29


Salut Mad, Salut a tous,

Moi je me suis fais deux petites fonctions qui me premettent de recuperer le chemin depuis un pid ou un hProcess, ce qui permet d'aller plus vite si on a deja son Hprocess ca évite de reouvrir le process.


Public Function GetProcessImageFile(ByVal pid As Long) As String

Dim hProcess As Long

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0&, pid)
If hProcess Then
GetProcessImageFile = GetProcessImageFileA(hProcess)
CloseHandle hProcess
End If

End Function

Public Function GetProcessImageFileA(ByVal hProcess As Long) As String

Dim Mods As String

If hProcess Then
Mods = String$(255, Chr$(0))
GetModuleFileNameExA hProcess, 0, Mods, Len(Mods)
GetProcessImageFileA = Left(Mods, InStr(1, Mods, Chr$(0)) - 1)
End If

End Function

 

Ajouter un commentaire


Vous devez être connecté pour pouvoir poster un commentaire.

 
 

Valid HTML 4.01 Transitional Valid CSS

Site web de Vb System Library version 1.3
Developpement et design réalisé par : Matthieu Napoli (MadMatt)
© 2007 Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
Temps d'execution de la page : 0.008 s
www.mnapoli.fr