Récuperer chemin+nom d'executable à partir du handle

Programmation d'applications complexes
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

j'ai cherché sur les 2 forums (Fr et En) mais je n'ai trouvé que le chemin de l'exe compilé par PB, mais rien sur un exécutable externe. Il doit bien y avoir une api qui fait ça mais je ne l'ai pas encore trouvé.

Ma solution de remplacement (lourdingue) consiste à lister d'abord tous les fichiers exe du système (procédure de recherche récursive) puis à tester quels sont ceux en cours d'exécution pour récupérer ensuite les infos de process. C'est un peu long comme méthode :roll: Arf!
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

bah en une recherche j'obtiens en premier résultat ma solution compatible 9X et NT, voila une adaptation du code que tu peux trouver ici :

Code : Tout sélectionner

Define Count.l, Proc32.PROCESSENTRY32, Temp.s
Define Kernel32ID.l, PSapiID.l, SnapshotID.l

Proc32\dwSize = SizeOf(PROCESSENTRY32)
Kernel32ID    = OpenLibrary(#PB_Default, "kernel32.dll")

If Kernel32ID
  PSapiID    = OpenLibrary(#PB_Default, "psapi.dll")
  SnapshotID = CallFunction(Kernel32ID, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, #Null)
 
  If SnapshotID
   
    If CallFunction(Kernel32ID, "Process32First", SnapshotID, Proc32)
      Repeat
       
        If PSapiID
          ProcessID = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, Proc32\th32ProcessID)
          Temp = Space(#MAX_PATH)
          CallFunction(PSapiID, "GetModuleFileNameExA", ProcessID, #Null, Temp, #MAX_PATH)
          Temp = Trim(Temp)
          CloseHandle_(ProcessID)
        Else
          Temp = PeekS(@Proc32\szExeFile, #MAX_PATH)
        EndIf
        
        Debug Temp
       
      Until CallFunction(Kernel32ID, "Process32Next", SnapshotID, Proc32) = #False
    EndIf
   
    CloseHandle_(SnapshotID)
  EndIf
 
  CloseLibrary(PSapiID)
  CloseLibrary(Kernel32ID)
EndIf
Dri
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Au poil, exactement ce que je cherchais! Merci Dri :D
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Répondre