Bonjour,
Si le PID d'un programme se trouve facilement lorsqu'on a le nom de la fenêtre via
GetWindowThreadProcessId_(FindWindow_(NOM_FENETRE.s,#Null),@PID)
J'aimerai trouver comment choper le PID d'après le nom d'un executable.
Merci de votre aide.
j'ai surement déjà croisé ce code mais impossible de remettre la main dessus. Tous ceux que j'ai se basent sur le nom de la fenêtre.
[OK] Comment trouver le PID d'après le NOM d'un exe
[OK] Comment trouver le PID d'après le NOM d'un exe
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Comment trouver le PID d'après le NOM d'un exe
Bonjour,
J'ai indiqué une solution dans le fil http://www.purebasic.fr/french/viewtopi ... =1&t=15775
J'ai indiqué une solution dans le fil http://www.purebasic.fr/french/viewtopi ... =1&t=15775
Voici les deux fonctions que j'ai retenu et qui fonctionnent très bien pour moi (Win10/64-bit) et PB 5.41 LTS
getNamePID : trouve le PID d'un programme a partir du nom de l'exécutable
findWindowTitle : trouve le handle d'une fenêtre a partir d'une partie du titre de la fenêtre
Code:Code : Tout sélectionner
EnableExplicit Define ptrPID = 0 : Define progr$ = "PureBasic.exe" Define ptrHW = 0 : Define titre$ = "PureBasic 5." Procedure.i getNamePID(ProcessName.s,*ptrPID) Protected HSnap.l,Prec.processentry32,result.l=#False HSnap=CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS,0) If HSnap=#INVALID_HANDLE_VALUE ProcedureReturn result EndIf Prec\dwSize=SizeOf(prec) If Not Process32First_(HSnap,Prec) ProcedureReturn result EndIf Repeat If LCase(GetFilePart(PeekS(@Prec\szexefile)))=LCase(ProcessName) PokeL(*ptrPID,Prec\th32ProcessID) result=#True Break EndIf Until Not Process32Next_(HSnap,Prec) CloseHandle_(HSnap) ProcedureReturn result EndProcedure Procedure.i findWindowTitle(tSearch.s,*ptrHW) Protected hWnd.i, tWnd.s hWnd = GetWindow_(GetDesktopWindow_(), #GW_CHILD) While hWnd tWnd = Space(GetWindowTextLength_(hWnd) + 2) GetWindowText_(hWnd, tWnd, Len(tWnd)) If FindString(LCase(tWnd), LCase(tSearch)) PokeL(*ptrHW,hWnd) ProcedureReturn #True EndIf hWnd = GetWindow_(hWnd, #GW_HWNDNEXT) Wend ProcedureReturn #False EndProcedure Debug "TEST 1 ==> getNamePID("+progr$+", "+@ptrPID+")"+#CRLF$ If getNamePID(progr$, @ptrPID) Debug "Le PID du programme ["+progr$+"] est "+ptrPID+#CRLF$ Debug "Le programme ["+progr$+"] est en cours d'exécution."+#CRLF$ Else Debug "Le programme ["+progr$+"] n'est pas lancé."+#CRLF$ EndIf Debug "TEST 2 ==> findWindowTitle("+progr$+", "+@ptrHW+")"+#CRLF$ If findWindowTitle(titre$,@ptrHW) Debug "Le handle de la fenêtre ["+titre$+"] est "+ptrHW+#CRLF$ Debug "Le programme ["+progr$+"] est en cours d'exécution."+#CRLF$ SendMessage_(ptrHW,#WM_SYSCOMMAND, #SC_MINIMIZE,0) Delay(1000) SendMessage_(ptrHW,#WM_SYSCOMMAND, #SC_RESTORE,0) SetForegroundWindow_(ptrHW) Else Debug "Le programme ["+progr$+"] n'est pas lancé."+#CRLF$ EndIf
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Comment trouver le PID d'après le NOM d'un exe
Qu'est ce qu'un PID ?
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Re: Comment trouver le PID d'après le NOM d'un exe
Le PID c'est le Process Identifier que l'on peut voir dans le "Task Manager" ou Gestionnaire de taches dans la colonne PID
C'est un numéro unique qui est donné a un process (processus, instance,..) lorsqu'on exécute un programme
C'est la même chose pour Unix/Linux
C'est un numéro unique qui est donné a un process (processus, instance,..) lorsqu'on exécute un programme
C'est la même chose pour Unix/Linux
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Comment trouver le PID d'après le NOM d'un exe
Merci cage je me suis perdu dans le topic 
Je n'arrive cependant pas à fusionner la détection des process ET la détection du PID.
Mon soft liste les process en cours mais renvoient 1 en PID
J'aimerai tout fusionner dans la proce ScanRunningProcesses() mais je galère.

Je n'arrive cependant pas à fusionner la détection des process ET la détection du PID.
Mon soft liste les process en cours mais renvoient 1 en PID
J'aimerai tout fusionner dans la proce ScanRunningProcesses() mais je galère.
Code : Tout sélectionner
Declare getNamePID(ProcessName.s,*ptrPID)
Declare ScanRunningProcesses()
Define ptrPID = 0
Structure Soft
Chem.s
Nom.s
Pid.s
EndStructure
Global NewList Process.soft()
Macro AddtoListe(lechemin,lenom,lepid)
AddElement (Process.soft())
Process.soft()\Chem = lechemin
Process.soft()\Nom = lenom
Process.soft()\Pid = lepid
EndMacro
Procedure ScanRunningProcesses()
Protected Snapshot, Snapshot2, ProcessFound
Protected Process.PROCESSENTRY32, Mod.MODULEENTRY32
Process\dwSize = SizeOf(PROCESSENTRY32)
Mod\dwSize = SizeOf(MODULEENTRY32)
Snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
If Snapshot
ProcessFound = Process32First_(Snapshot, Process)
While ProcessFound
Snapshot2 = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE,Process\th32ProcessID)
If Snapshot2
If Module32First_(Snapshot2, @Mod)
compte+1
chemincomplet.s = PeekS(@Mod\szExePath[0])
nomprogramme.s = GetFilePart(chemincomplet)
pidprogramme.s = ""
AddtoListe (chemincomplet, nomprogramme, pidprogramme )
EndIf
CloseHandle_(Snapshot2)
EndIf
ProcessFound = Process32Next_(Snapshot, Process)
Wend
CloseHandle_(Snapshot)
Debug "il y a " + Str(compte) + " process en cours"
EndIf
EndProcedure
Procedure.i getNamePID(ProcessName.s,*ptrPID)
Protected HSnap.l,Prec.processentry32,result.l=#False
HSnap=CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS,0)
If HSnap=#INVALID_HANDLE_VALUE
ProcedureReturn result
EndIf
Prec\dwSize=SizeOf(prec)
If Not Process32First_(HSnap,Prec)
ProcedureReturn result
EndIf
Repeat
If LCase(GetFilePart(PeekS(@Prec\szexefile)))=LCase(ProcessName)
PokeL(*ptrPID,Prec\th32ProcessID)
result=#True
Break
EndIf
Until Not Process32Next_(HSnap,Prec)
CloseHandle_(HSnap)
ProcedureReturn result
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListViewGadget(1,10,10,480,230,0)
ScanRunningProcesses()
ForEach Process.soft()
Debug "PID : " + getNamePID(Process.soft()\Nom, @ptrPID)
Process.soft()\Pid = Str(getNamePID(Process.soft()\Chem,*ptrPID) )
Next
ForEach Process.soft()
Debug Process.soft()\Nom + " : " + Process.soft()\Chem + " : " + Process.soft()\Pid
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Comment trouver le PID d'après le NOM d'un exe
J'ai juste modifié cette partie du code
La procédure getNamePID(Process.soft()\Nom, @ptrPID) retourne vrai/faux uniquement
Si la procédure retourne vrai, alors ptrPID contient le PID
Code : Tout sélectionner
ForEach Process.soft()
If getNamePID(Process.soft()\Nom, @ptrPID)
Debug "PID : " + ptrPID
Process.soft()\Pid = Str(ptrPID)
; Debug "PID : " + getNamePID(Process.soft()\Nom, @ptrPID)
; Process.soft()\Pid = Str(getNamePID(Process.soft()\Chem,*ptrPID))
EndIf
Next
Si la procédure retourne vrai, alors ptrPID contient le PID
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Comment trouver le PID d'après le NOM d'un exe
Merci, au poil. 

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels