Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Utilisation de ExecCmd [ Windows / API ] (PROGRAMMIX)

dimanche 16 décembre 2007 à 18:34:51 | Utilisation de ExecCmd

PROGRAMMIX

Bonjour

Dans une application, j'affiche une feuille fille dans laquelle se trouve un bouton permettant de lancer une autre application en utilisant le code suivant :

    Dim retval As Long
   
    If AfficherFormulaire Then
        retval = ExecCmd(App.Path & "\ListeDuPersonnel.exe " & RepertoirePersonnel & "FichierDuPersonnel.txt")
    End If
   
    ListeSalariés.LireLeCarnet (RepertoirePersonnel & "FichierDuPersonnel.txt")


Mais si, je ferme ma feuille fille sans avoir précédamment fermer l'application appelée, ça plante.
Théoriquement, je ne devrais pas procéder ainsi, mais ceci est une projection d'une mauvaise manipulation de la part d'un utilisateur lambda.

Que devrais-je faire pour éviter cela ?


Programmix

dimanche 16 décembre 2007 à 19:49:30 | Re : Utilisation de ExecCmd

jmfmarques

Membre Club
Bonjour,

Euh...

Et si tu nous parlais de la fonction ExecCmd qui n'est ni une fonction de VB ni une fonction de l'Api de Windows (du moins à ma connaissance) ?

Tu as apparemment donné ce nom à une fonction ... (tu aurais pu l'appeler toto...)

Que fait-elle (son code ) ?

dimanche 16 décembre 2007 à 20:35:23 | Re : Utilisation de ExecCmd

PROGRAMMIX

OUPS,

Effectivement, c'est une fonction qui appelle la procédure suivante qui appelle certaines API :

Public Function ExecCmd(cmdline$)
     
    Dim proc As PROCESS_INFORMATION
    Dim start As STARTUPINFO
    Dim ret&
   
    ' Initialisez la structure STARTUPINFO :
    start.cb = Len(start)

    ' Démarrez l'application Shell :
    ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)

    ' Attendez la fin de l'application Shell :
    ret& = WaitForSingleObject(proc.hProcess, INFINITE)
    Call GetExitCodeProcess(proc.hProcess, ret&)
    Call CloseHandle(proc.hThread)
    Call CloseHandle(proc.hProcess)
    ExecCmd = ret&

End Function


Les variables et déclarations sont les suivantes :

Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type

Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessID As Long
    dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, _
        ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
        ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
        ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _
        lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&

Programmix

dimanche 16 décembre 2007 à 21:20:24 | Re : Utilisation de ExecCmd

jmfmarques

Membre Club

Juste une question :

Si ce n'est que pour faire celà, pourquoi n'utilises-tu pas directement la fonction ShellExecute de l'Api de Windows, voire la fonction Shell de VB ?

genre :

Private RetVal As Long

Private Sub Command1_Click()
    RetVal = Shell("C:\WINNT\notepad.EXE", 1)    ' Run Calculator.
End Sub

 Et tu ne serais pas "planté" en fermant ta form Fille ...


dimanche 16 décembre 2007 à 21:30:02 | Re : Utilisation de ExecCmd

PROGRAMMIX

C'est qu'avec ShellExecute, la procédure n'attend pas la fermeture de l'exe avant de continuer.

Or dans mon cas, il me faut attendre avant de pouvoir recharger le fichier avec les données modifiées via l'exe en question.

Programmix

lundi 17 décembre 2007 à 07:17:57 | Re : Utilisation de ExecCmd

Renfield

Administrateur CodeS-SourceS
vu que tu as le proc.hProcess, tu es en mesure de forcer la fermeture de l'application distante (via API) lorsque l'utilisateur souhaite fermer la form fille. autre possibilité, empecher la fermeture de la fenetre fille tant que l'appi en question n'est pas fermée (dans QueryUnload) tiens une version plus complète de ExecCmd: http://www.vbfrance.com/codes/SHELLANDWAIT-EXECUTER-APPLICATION-ATTENDRE-FIN-RENVOYER-SON-CODE_34867.aspx

mardi 18 décembre 2007 à 20:03:30 | Re : Utilisation de ExecCmd

PROGRAMMIX

Réponse acceptée !
Merci Renfield pour ton code.

Je n'ai pas testé les possibilités que tu proposes avec le proc.hProcess et le QueryUnload.

Je verrai peut-être cela plus tard, mais pour l'instant, ton code me convient.

Programmix



Cette discussion est classé dans : application, feuille, utilisation, fille, execcmd


Répondre à ce message

Sujets en rapport avec ce message

utilisation de feuille mdi [ par molbento ] Bonjour, je développe enn visual basic. J'ai un problème pour développer une application. J'aimerais que pour utilisé mon application l'utilisateur do Faire apparaître la nouvelle feuille Excel [ par avyrex1926 ] Bonjour à tous, Dans mon fichier Excel qui fonctionne avec des interfaces VBA, le fichier Excel est Application.Visible = False. À une certaine étape, VBA apeler une feuille d'un projet 1 au projet 2??? [ par PaSs38 ] Bonjour a tous,J'ai un petit gros problèmes (sa me soule : ) ).Voila J'ai deux projet VbA qui vont ce trouver dans le même fichier lorsque l'applicati vb et excel [ par Fabian26 ] Slt,  voila en fait j'ai deux tableau vb et je voudrais exporter ces 2 tableau dans la meme feuille excel chacun dans une colonne séparée comment pui rechercher une valeur a partir d'un classeur dans c:\ sans l'ouvrir et la copier dans un autre [ par kelllk1 ] Bonjour,aidez moi svp!!voilà, mon problème est que je dois saisir une reference dans une box, pour la chercher dans un classeur dans c: et une fois tr Utilisation Bouton Entrée [ par bruce207 ] Bonjour,je voudrais que lorsque l'utilisateur appui sur la touche Entrée, il exécute un bouton que j'ai défini par défaut. Avec un bouton Command1 sur Fermer complétement une application [ par mySQL15 ] Bonsoir !Voila j'ai un petite problèmequand je ferme ma feuille avec 'End' elle se fermemais je la retrouve dans la liste des processus...comment c'es Afficher une feuille ou des cellules Excel dans un programme en vba [ par philou94700 ] Bonjour à tous,Je désire réaliser une application windows à l'aide de Visual Studio 2008 où je pourrais entre autre à l'aide d'un clic sur un bouton a Feuille de paramétrage VB [ par basamir ] bonjour,je dispose d'une feuille avec des cases à cocher qui sert à paramétrer l'application. Cette page doit être configurée une seule fois et que to


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.