Hi Francisco,
Thank you for your advice, it was very useful.
Here is the code I used to validate your proposal and it works well:
Test code :
long ll_ret
ll_Ret = w_principal.wf_Execute("C:\Windows\System32\calc.exe", '', "open", false)
messagebox("Calculatrice ouverte", "PID = " + string(ll_ret))
ll_Ret = w_principal.wf_Execute("C:\Windows\System32\taskkill.exe", "/PID" + string(ll_Ret), "", false)
messagebox("Fermeture de la calculatrice", ll_ret)
detail of wf_Execute function :
//////////////////////////////////////////////////////////////////////////////
//LANCEMENT D'UNE COMMANDE SHELL SUR UN FICHIER DONNE
//Renvoi : une valeur < 32 si erreur
// si ab_Wait=true alors on renvoie le handle de la fenêtre ouverte
// sinon on renvoie le handle du process de l'application
//////////////////////////////////////////////////////////////////////////////
CONSTANT long SEE_MASK_NOCLOSEPROCESS = 64
CONSTANT long INFINITE = 4294967295 //&HFFFFFFFF
string ls_Class
long ll_ret
long ll_Handle
struc_shellexecuteinfo lstruc_shellexecuteinfo
lstruc_shellexecuteinfo.cbsize = 60
lstruc_shellexecuteinfo.fMask = SEE_MASK_NOCLOSEPROCESS // Ne ferme pas le process
lstruc_shellexecuteinfo.lpVerb = as_commande
lstruc_shellexecuteinfo.lpParameters = as_Parametres
lstruc_shellexecuteinfo.lpfile = as_fichier
lstruc_shellexecuteinfo.lpClass = ls_class
lstruc_shellexecuteinfo.nShow = SW_NORMAL
ll_ret = ShellExecuteEx(lstruc_shellexecuteinfo)
IF ll_ret = 0 THEN
//Erreur lors du lancement
RETURN lstruc_shellexecuteinfo.hInstapp
END IF
//Vérifie si on souhaite attendre l'ouverture de l'application pour continuer
if ab_Wait then
//Attend que l'application lancée reprenne la main et soit prete a être utilisée
WaitForInputIdle(lstruc_shellexecuteinfo.hprocess, INFINITE)
//Récupération du handle de la fenêtre se trouvant au premier plan (celle-ci doit être la fenêtre de l'application)
ll_Handle = GetForegroundWindow()
//Récupère le parent de la fenêtre récupérée pour que l'on soit sûr d'avoir la fenêtre Main de l'application
ll_Handle = wf_GetParent(ll_Handle)
return ll_Handle
end if
//Retourne le handle du process
return lstruc_shellexecuteinfo.hProcess