violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
2 mai 2006 à 13:35
croftman
Messages postés110Date d'inscriptiondimanche 23 janvier 2005StatutMembreDerniè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 !
@+
A voir également:
Récupérér path d'un processus en fonction de son PID
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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