IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Récupérer %ErrorLevel% d'un process DOS dans VB


Sujet :

VB 6 et antérieur

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut Récupérer %ErrorLevel% d'un process DOS dans VB
    Bonjour,

    voilà mon problème :
    - mon application crée un batch pour lancer un programme (compresseur/décompresseur) en ligne de commande
    - mon appli lance ensuite le batch via une fonction Shell
    - ce batch renvoie un numéro d'erreur (%ErrorLevel%) qui me permet de savoir si la compression/décompression s'est bien terminée (je l'affiche pour l'instant dans ma fenêtre DOS)

    - ma question est : comment faire remonter ce numéro dans mon appli VB ?

    J'ai trouvé une solution ici-même, créer un fichier de résultat à partir du batch et le lire par la suite (merci ProgElect ), mais je me demandais s'il n'était pas possible de récupérer l'info à la volée, sans fichier intermédiaire, peut-être à partir de l'ID renvoyé par le Shell... mais comme les API et moi, ça fait 4, je n'ai aucune idée de la marche à suivre.
    Si vous avez une piste...

    En vous remerquiant !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Je tiens une piste avec GetExitCodeProcess, je creuse, je creuse...

  3. #3
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Previens nous si tu trouves du pétrole.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    A moi les pétro-dollars !

    Et voilà, on passe sa ligne de commande et on récupère le n° d'error (%ErrorLevel%)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Option Explicit
     
    Private Declare Function OpenProcess Lib "kernel32" _
      (ByVal dwDesiredAccess As Long, _
       ByVal bInheritHandle As Long, _
       ByVal dwProcessId As Long) As Long
     
    Private Declare Function GetExitCodeProcess Lib "kernel32" _
      (ByVal hProcess As Long, lpExitCode As Long) As Long
     
    Private Declare Function CloseHandle Lib "kernel32" _
      (ByVal hObject As Long) As Long
     
    Private Const PROCESS_QUERY_INFORMATION = &H400
    Private Const STATUS_PENDING = &H103&
     
    Private Function GetExitCode(cmdline As String, WindowStyle As VbAppWinStyle) As Long
     
        Dim hProcess As Long
        Dim ProcessId As Long
        Dim exitCode As Long
        '
        On Error GoTo Errshell
        '
        ProcessId = Shell(cmdline, WindowStyle)
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
        '
        Do
            Call GetExitCodeProcess(hProcess, exitCode)
            DoEvents
     
        Loop While exitCode = STATUS_PENDING
        '
        GetExitCode = exitCode
        '
        CloseHandle hProcess
        '
        Exit Function
        '
    Errshell:
        MsgBox Error(Err), 16, "Erreur"
        Exit Function
        '
    End Function
    Sources adaptées par Bibi (j'ai pas fait grand chose, je dois dire =)
    1) VB.NET
    2) Patrick MOIRE

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Problème identique
    Citation Envoyé par Phifi Voir le message
    A moi les pétro-dollars !

    Et voilà, on passe sa ligne de commande et on récupère le n° d'error (%ErrorLevel%)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Option Explicit
     
    Private Declare Function OpenProcess Lib "kernel32" _
      (ByVal dwDesiredAccess As Long, _
       ByVal bInheritHandle As Long, _
       ByVal dwProcessId As Long) As Long
     
    Private Declare Function GetExitCodeProcess Lib "kernel32" _
      (ByVal hProcess As Long, lpExitCode As Long) As Long
     
    Private Declare Function CloseHandle Lib "kernel32" _
      (ByVal hObject As Long) As Long
     
    Private Const PROCESS_QUERY_INFORMATION = &H400
    Private Const STATUS_PENDING = &H103&
     
    Private Function GetExitCode(cmdline As String, WindowStyle As VbAppWinStyle) As Long
     
        Dim hProcess As Long
        Dim ProcessId As Long
        Dim exitCode As Long
        '
        On Error GoTo Errshell
        '
        ProcessId = Shell(cmdline, WindowStyle)
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
        '
        Do
            Call GetExitCodeProcess(hProcess, exitCode)
            DoEvents
     
        Loop While exitCode = STATUS_PENDING
        '
        GetExitCode = exitCode
        '
        CloseHandle hProcess
        '
        Exit Function
        '
    Errshell:
        MsgBox Error(Err), 16, "Erreur"
        Exit Function
        '
    End Function
    Sources adaptées par Bibi (j'ai pas fait grand chose, je dois dire =)
    1) VB.NET
    2) Patrick MOIRE
    Bonsoir à tous,

    j'ai voulu utiliser ce code pour mon problème étant très similaire mais cela ne fonctionne pas, la fonction me retourne 0 alors qu'elle devrait me retourner 2.

    Dans mon cas c'est lorsque j'exécute la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\program files\7-Zip\7z.exe" t "chemin_de_mon_archive.rar"
    Qui permet de tester l'intégrité d'une archive, dans le cas d'une archive corrompue cela devrait me retourner 2 mais là j'ai toujours 0. Si je l'exécute en DOS directement et que je retourne mon %errorlevel% j'ai bien 2, mais par la fonction ci dessus en VBA, cela ne fonctionne pas.

    Des idées ??

    Merci d'avance

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Personne ??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Langage/Algorithme] Récupérer le retour d'une commande MS-DOS dans une variable sous C++ Builder XE2
    Par Mercusyo dans le forum C++Builder
    Réponses: 7
    Dernier message: 21/03/2012, 09h41
  2. Réponses: 10
    Dernier message: 21/02/2007, 20h16
  3. Réponses: 1
    Dernier message: 01/12/2005, 11h35
  4. récupérer la valeur du 2ème champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/07/2004, 16h45
  5. [langage] Commande DOS dans un programme
    Par Jibees dans le forum Langage
    Réponses: 15
    Dernier message: 23/04/2003, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo