Récupérér path d'un processus en fonction de son PID

Résolu
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 2 mai 2006 à 13:35
croftman Messages postés 110 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 2 avril 2010 - 16 juin 2007 à 20:31
Violent Ken
Salut à tous !
Ma question est simple : comment peut-on récupérer le path complet d'un exécutable lancé (exemple : c:\windows\system32\explorer.exe) en fonction, et uniquement en fonction, de son PID ?

J'ai déjà pas mal cherché sur vbfrance.com, sur google...etc. et j'ai pas vraiment trouvé de solution simple.
Merci d'avance !
@+

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 mai 2006 à 15:24
A traduire en VB, pas trop dur ici je pense.

char szname[264];
DWORD n;
hprcss = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pID);
if(hprcss == NULL) return;
En VB prepare une string de 264 octets avec Space() par exemple
n = GetModuleFileName(hprcss, szname, 264);
CloseHandle(hprcss);
if(n == 0) return; // PAS BON ne pas toucher

en VB ajouter un truc du genre:
left(szname, n)  ENFIN TU VERRAS TOI POUR SYNTAXE EXACTE

ciao...
BruNews, MVP VC++
3
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
2 mai 2006 à 16:42
Pour ceux que çà intéresse, voici le code que j'ai créé, en m'inspirant de la source C plus haut :



Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Public Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName 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 cbNeeded As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16

Public Function GetPathFromPID(lPID As Long) As String
GetPathFromPID = vbNullString
Dim lHprcss As Long, lSize As Long, sResult As String, lReturn As Long
Dim lngModules(1 To 200) As Long

'création d'un buffer
sResult = Space$(512)

lHprcss = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lPID) 'get the hInstance application
If lHprcss = 0 Then Exit Function 'echec
lngReturn = EnumProcessModules(lHprcss, lngModules(1), 200, 0)
lSize = GetModuleFileNameExA(lHprcss, lReturn, sResult, 512)


CloseHandle lHprcss 'ferme le handle
GetPathFromPID = Left$(sResult, lSize) 'récupère le nom

End Function




Voilà, c'est OK, çà marche ;)
@+
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 mai 2006 à 13:45
OpenProcess
GetModuleFileName
CloseHandle

ciao...
BruNews, MVP VC++
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
2 mai 2006 à 13:47
Ok, je vais me débrouiller avec çà !
Merci, @+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
2 mai 2006 à 14:49
Violent Ken
Ahem... Désolé de revenir, mais je n'y arrive pas...
Serait-il possible que tu développes davantage ??

Merci, @+
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
2 mai 2006 à 15:36
Parfait. Avec çà çà va marcher nickel.
Merci à toi pour ta rapidité !
@+
0
croftman Messages postés 110 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 2 avril 2010
16 juin 2007 à 20:31
Impec merci je vais suremenr l'utiliser

Juste oublier de déclarer lngReturn mais bon ^^
0
Rejoignez-nous