Ne pas rendre la main tant que l'exe n'est pas terminé

sitpyjo - 12 avril 2017 à 13:53 - Dernière réponse : JeuDuTaquin 18 Messages postés mardi 4 juillet 2017Date d'inscription 2 août 2017 Dernière intervention
- 30 juil. 2017 à 02:21
Bonjour,
Je viens de faire un exe en VB6 sans Form1 (exe standard avec Objet de démarrage = Sub Main)

Le programme se déroule normalement et fait ce que je lui ai dit de faire, mais lancé en ligne de commande dans une cmd, il rend la main tout de suite (alors que le programme continue de s'executer).

Comment faire pour qu'il rende la main uniquement après avoir teminé

Merci de votre réponse et bonne journée
Afficher la suite 

2 réponses

Répondre au sujet
cs_Stephane84 16 Messages postés dimanche 19 février 2006Date d'inscription 12 avril 2017 Dernière intervention - 12 avril 2017 à 17:01
0
Utile
Bonjour,

je n'ai pas testé exactement le code qui suit mais j'ai déjà utilisé quelque chose de similaire...

http://stackoverflow.com/questions/5685972/how-to-wait-for-a-shell-process-to-finish-before-executing-further-code-in-vb6

Option Explicit

Private Const INFINITE = &HFFFFFFFF&
Private Const SYNCHRONIZE = &H100000
Private Const PROCESS_QUERY_INFORMATION = &H400&

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 Declare Function OpenProcess Lib "kernel32" ( _
    ByVal dwDesiredAccess As Long, _
    ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long

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

Public Function ShellSync( _
    ByVal PathName As String, _
    ByVal WindowStyle As VbAppWinStyle) As Long
    'Shell and wait.  Return exit code result, raise an
    'exception on any error.
    Dim lngPid As Long
    Dim lngHandle As Long
    Dim lngExitCode As Long

    lngPid = Shell(PathName, WindowStyle)
    If lngPid <> 0 Then
        lngHandle = OpenProcess(SYNCHRONIZE _
                             Or PROCESS_QUERY_INFORMATION, 0, lngPid)
        If lngHandle <> 0 Then
            WaitForSingleObject lngHandle, INFINITE
            If GetExitCodeProcess(lngHandle, lngExitCode) <> 0 Then
                ShellSync = lngExitCode
                CloseHandle lngHandle
            Else
                CloseHandle lngHandle
                Err.Raise &H8004AA00, "ShellSync", _
                          "Failed to retrieve exit code, error " _
                        & CStr(Err.LastDllError)
            End If
        Else
            Err.Raise &H8004AA01, "ShellSync", _
                      "Failed to open child process"
        End If
    Else
        Err.Raise &H8004AA02, "ShellSync", _
                  "Failed to Shell child process"
    End If
End Function


--
Commenter la réponse de cs_Stephane84
JeuDuTaquin 18 Messages postés mardi 4 juillet 2017Date d'inscription 2 août 2017 Dernière intervention - Modifié par JeuDuTaquin le 30/07/2017 à 02:21
0
Utile
Salut,

étonnant ton programme!
Aucune routine en Sub Main () n'existe.
Donc, il ne fera rien du tout.

Sub Main ()
'ton code
end sub ' retour au prompt.

Toutes les functions et autres sub seront ignorées au lancement.
(par défaut, la sub Main est vide!)

Nota: Utiliser l'extension "BAS" pour le programme, sinon une 'form' fantôme restera ouverte en tâche active!
Commenter la réponse de JeuDuTaquin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.