Lancement d'un process mais le process appelant garde le focus dans certains cas
aciclb
Messages postés12Date d'inscriptionlundi 18 octobre 2004StatutMembreDernière intervention18 avril 2012
-
28 avril 2007 à 18:58
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
28 avril 2007 à 19:32
Au secours ...! je m'arrache les quelques cheveux qu'il me reste.
J'ai développé une application avec un menu EXE qui appelle d'autres programme EXE. Les options du menu sont des boutons que l'utilisateur peut cliquer ou appeler par le clavier avec les touches de 1 à 9.
C'est l'utilisation du clavier qui pose problème. Si l'utilisateur appuie sur le 1, pas de pb. Le programme EXE 1 s'execute bien et prend le focus, le menu EXE est en tache de fond derriere.
Si l'utilisateur appuie 2 fois sur la touche 1 ou sur la touche 1 puis entrée, le programme EXE 1 s'execute bien et s'affiche à l'écran mais c'est le menu EXE qui garde le focus derriere. Les programmes sont affichés en plein écran.
J'ai compris que c'était un pb d'evenement.
Descrition du code.
Le menu EXE utilise Form_KeyDown
si KeyCode = vbkey1 alors Appel de la fonction de lancement du programme
Fonction de lancement du programme
Public Sub ExecuterProgramme(Commande As String, Optional sArgument As String = "")
Dim proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
Dim ret As Long
'Lancement de la commande
'StartupInfo pour le processus qui lancera la commande
Start.cb = Len(Start)
'Lancement de la commande
ret& = CreateProcess(0&, Trim(Commande & " " & sArgument), 0&, 0&, 0&, NORMAL_PRIORITY_CLASS, 0&, 0&, Start, proc)
If ret = 0 Then
Err.Raise Err.LastDllError, "LancerProcess", "Erreur systeme N° " & Err.LastDllError
'MsgBoxTPV Err.Description, vbExclamation, sExe
End If
' Initialisation du process
Call WaitForInputIdle(proc.hProcess, INFINITE)
' Suppression du thread handle qui ne sert à rien
Call CloseHandle(proc.hThread)
Do
ret = WaitForSingleObject(proc.hProcess, 0)
' Si plus de timeout, le process est terminé
If ret <> WAIT_TIMEOUT Then Exit Do
'Le process n'est pas fini, on peut faire autre chose
DoEvents
Loop While True
' Suppression du process
Call CloseHandle(proc.hProcess)
Call CloseHandle(proc.hThread)
errortag:
If proc.hProcess <> -1 Then CloseHandle proc.hProcess
If proc.hThread <> -1 Then CloseHandle proc.hThread
MsgBoxTPV Err.Number & " - " & Err.Description, vbExclamation, Commande & " " & sArgument
End Sub
Le DoEvents ne change rien au problème.
En fait, si l'utilisateur appuie sur plusieurs touche, le menu EXE execute toujours les evenements tans que le programme EXE n'est pas encore chargé, je pense que c'est une histoire de threed ou process. Il faudrait pouvoir, des la premiere touche , bloquer tous les evenements du menu EXE mais la je ne sais pas comment faire.
Merci , celui qui me donne la soluce ou la piste est un dieu de l'informatique, c'est sur ...!
AU SECOURS ....
<sup>
Dominique R. </sup>
A voir également:
Lancement d'un process mais le process appelant garde le focus dans certains cas