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

sitpyjo - 12 avril 2017 à 13:53
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 - 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

2 réponses

cs_Stephane84 Messages postés 16 Date d'inscription dimanche 19 février 2006 Statut Membre Dernière intervention 12 avril 2017
12 avril 2017 à 17:01
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


--
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 30 juil. 2017 à 02:21
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!
0
Rejoignez-nous