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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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
1
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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
1
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
1
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
1
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