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 :

Remonter une valeur d'un programme VB exécuté d'une fenêtre DOS


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut Remonter une valeur d'un programme VB exécuté d'une fenêtre DOS
    Bonjour à tous,

    Un programme me permet d'exécuter des exécutables (créer avec VB6).
    Ce programme lance en vérité des commandes DOS.

    Je voudrais, lorsqu'une erreur est généré par un exécutable Visual Basic, que mon programme renvoie une donnée erreur (N° + Description) dans la fenêtre DOS dans lequel il a été exécuté.

    Le casse tête est ; je sais récupérer les erreurs VB, mais je ne sais pas comment faire remonter cette erreur.
    Je sais que l'on peut passer une commande DOS sur un programme VB, mais je voudrais faire l'inverse, qu'il renvoie une donnée pour dire qu'il ne c'est pas exécuté correctement.

    J'espère être clair, si ce n'est pas le cas ne pas hésiter à me poser des questions.

    Merci d'avance.

    Coin.

  2. #2
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 092
    Points : 16 606
    Points
    16 606
    Par défaut
    Un programme me permet d'exécuter des exécutables (créer avec VB6).
    est-ce les exécutables qui sont créer avec VB6 ?
    est-ce le programme qui lance des exécutables qui a ete créer avec VB6 ?
    la stratégie depandra pour une bonne part de ces réponces.

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut
    Salut,

    Se sont les exécutables qui sont créé en VB6.

    Je me demandais si il n'existe pas une fonction du genre Return que l'on puisse utilisé dans le programme VB pour que celui renvoie une valeur.

    Merci d'avance
    Coin.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    peut-être existe-t-il des méthodes d'écriture de console ?

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Vld44
    méthodes d'écriture de console ?


    heu!!! C'est à dire ???

    Coin.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Bah tu as un objet qui représente la ligne de commande comme n'importe quelle form ... Peut-être qu'il existe des APIs qui permettent d'écrire ce que tu veux dans cette "console" (la ligne de commande c:\ si tu veux)

  7. #7
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 092
    Points : 16 606
    Points
    16 606
    Par défaut
    Ces progs VB doivent donc pouvoir ecrire dans la fenêtre dos qui les a lancé.
    Un programme ecrit correctement, en VB ou autre, ne devrait pas generer une erreur non gérée, On Error GoTo .... , On Error Resume Next..... permettent de recupérer la quasi totalité des problemes qui peuvent survenir dans le deroulement du dit programme.

    Dans chaque programme signaler que l'on veu recuperer l'erreur (On Error GoTo .... , On Error Resume Next....),
    dans la gestion de traitement de l'erreur,
    activer la fenêtre DOS (AppActivate TitreDeLaFenetreDos)
    ecrire dans cette fenêtre (SendKeys CStr(Err.Number) & " - " & Err.Description)
    supprimer l'erreur (Err.Clear)

    Voici du code qui ecrit dans une fenêtre DOS, et dans l'autre sens recupere une information de la fenêtre DOS
    Ce projet me sert à faire du copier/coller pour d'autre programme (pense bete).
    A la base il m’a servi à mettre au point une vérification d’une connexion par une commande PING

    FentreDos.zip (2.0Ko)

    Changement d'adresse du ZIP

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut


    Cela ne fonctione pas trop:
    Citation Envoyé par ProgElecT
    activer la fenêtre DOS (AppActivate TitreDeLaFenetreDos)
    ecrire dans cette fenêtre (SendKeys CStr(Err.Number) & " - " & Err.Description)
    Car je dois donc connaître le nom de ma fenêtre qui m'a permis de lancer mon programme VB.
    Si je donne mon nom de fenêtre C:\WINNT\System32\cmd.exe, mon code deviens donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AppActivate ("C:\WINNT\System32\cmd.exe")
    SendKeys CStr(Err.Number) & " - " & Err.Description
    Et cela ne me fait rien.

    J'ai besoin de gérer les erreurs de cette façon là, ainsi le programme de coordination de tâches, qui exécute tout mes VB, note qu'une erreur est survenue, je vois donc au premier coup d'oeil quelle programme est tombé en carafe.

    Mais j'ai l'impression que ce n'est pas tout simple

    Pas mal pour ton prog PING, j'ai fait quelque chose de ressemblant qui permet d'enregistrer les variables d'environnement et l'adresse MAC et IP du PC.

    Coin.

  9. #9
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut


    Je crois (mais je ne suis pas sur, à vérifier) que tu peux rediriger le résultat dans un fichier texte, avec un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    macommande >> fichier.txt
    Tu peux ensuite exploiter ce fichier texte.

    Si je me plante, arretez moi!

    ++

  10. #10
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut


    Oui je peux le faire par un fichier txt, qui me permet de sauvegarder les erreurs.

    Le but est d'avoir un retour d'info rapide et clair.

    Mes programmes VB sont exécutés à partir d'un programme de gestion de tâche, si il voit une erreur la tâche apparaît en rouge sinon elle est verte.

    Je sais que lors d'une exécution d'une procédure Stockée SQL Serveur 2000, en cas d'erreur un message est retourné sur la fenêtre Dos d'où j'ai exécuté ma procédure. Je voudrai faire la même chose pour mon programme VB ;
    Lancer le programme VB d'une fenêtre DOS, et en cas d'erreur je voudrais récupérer le message sur la fenêtre d'où j'ai exécuté mon programme VB.

    Coin.

  11. #11
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    si l'erreur est écrite dans un fichier texte, à partir de VB tu scrutes ce fichier texte de suite après avoir lancé la commande.

  12. #12
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Asdorve
    si l'erreur est écrite dans un fichier texte, à partir de VB tu scrutes ce fichier texte de suite après avoir lancé la commande
    Je pense qu'on ne se comprend pas. Tu me proposes d'enregistrer mes erreurs dans un fichier txt ?

    Je ne comprend pas comment en enregistrant mon erreur dans un fichier txt, je peux après remonter la désignation de cette erreur dans ma fenêtre DOS d'exécution du programme VB.

  13. #13
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 092
    Points : 16 606
    Points
    16 606
    Par défaut
    mauvaise syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AppActivate ("C:\WINNT\System32\cmd.exe")
    bonne syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Msg$
    Msg$ =  CStr(Err.Number) & " - " & Err.Description
    AppActivate "C:\WINNT\System32\cmd.exe", True
    'ou plus de chance avec
    AppActivate "cmd.exe", True
    SendKeys Msg$ , True
    en mettant le message d'erreur dans une variable il semblerai que sa passe mieux, j'ai verifier au pro avec NT 2000 pack 4, sa fonctionne à tous les coups, hier je l'avai réessayé avec XP Familliale.

  14. #14
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par Coin
    Je pense qu'on ne se comprend pas. Tu me proposes d'enregistrer mes erreurs dans un fichier txt ?

    Je ne comprend pas comment en enregistrant mon erreur dans un fichier txt, je peux après remonter la désignation de cette erreur dans ma fenêtre DOS d'exécution du programme VB.
    excuse, on s'est mal compris

  15. #15
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut
    ProgElecT,

    Je viens d'essayer ton code, cela ne fonctionne pas....

    Si je lance mon programme ma fenêtre DOS me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    c:\>toto.exe
    N°Erreur - Description
    c:\>
    Toto.exe est le nom de mon exécutable VB, je devrais donc avoir mon erreur apparaître l'erreur dans la partie en italique ?

    L'erreur n'apparaît pas pour moi, je ne comprend pas que toi ça fonctionne ?
    Je suis en windows 200, et VB6 SP4

    De plus mon programme boucle maintenant sur lui même, il est toujours dans le gestionnaire des tâches....

    Si tu veux plus de détails, n'hésite pas.

    Asdorve, c'est pas grave, ça arrive, je m'exprime peut être pas clairement.

    Coin.

  16. #16
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    En remontant dans mes vieux souvenir de Dos, il me semble que les application Dos retournait un code erreur que l'on pouvait traquer dans un batch avec if errorlevel == etc ..
    Je peux me tromper, mais je ne pense pas que des programmes windows continue a renvoyer ce type d'erreur. Donc , si comme je le suppose, ton programme de lancement s'attend a ce type d'information, ca va etre dur.

    Peut etre des programmes ecrits en C ?

    Ou alors réécrire ton programme de lancement

  17. #17
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 092
    Points : 16 606
    Points
    16 606
    Par défaut
    Bonjour Delbeke

    pour Coin
    Sur un Form, un Label, 2 CommandButton
    avec ce petit bout de code,
    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
    Option Explicit
     
    Private Sub Command1_Click()
    Dim ShL
    ShL = Shell("cmd.exe", vbNormalFocus)
    End Sub
     
    Private Sub Command2_Click()
    Dim A As Integer, B As Integer, C As Integer
    Dim Msg$
    A = 10: B = 0
    On Error Resume Next
    C = A / B
    If Err <> 0 Then
     Msg$ = CStr(Err.Number) & " - " & Err.Description
     Err.Clear
     Msg$ = Msg$ & " Appli " & Me.Caption
     Msg$ = "SET MeeRR=" & Msg$
     DoEvents
     On Error GoTo GestErr
     AppActivate "cmd.exe", True
     SendKeys Msg$ & Chr$(13), True
     Label1 = "C'est fait"
    End If
    Exit Sub
    GestErr:
    Label1 = "pas bon"
    End Sub
    lancer la fenêtre Dos avec le bouton Command1
    puis,
    clicker le bouton Command2
    dans la fenêtre DOS apparait
    ----------------------écran DOS------------------------------------------
    Microsoft Windows XP [version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    C:\WINDOWS\system32>SET MeeRR=11 - Division par zéro

    --------------------------------------------------------------------------

    puis en reprenant la main dans la fenêtre DOS pour verifier, je passe set M
    pour que DOS me retourne la valeur de la variable MeeRR

    ------------------------écran DOS----------------------------------------
    Microsoft Windows XP [version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    C:\WINDOWS\system32>SET MeeRR=11 - Division par zéro

    C:\WINDOWS\system32>set M
    MeeRR=11 - Division par zéro

    C:\WINDOWS\system32>
    --------------------------------------------------------------------------

    la variable DOS MeeRR devrait etre recuperable par ton programme de lancement non?

    autrement la je calle , je ne vois plus comment t'aider

  18. #18
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut
    à vous deux,

    ProgElecT,

    Ton code fonctionne bien quand on le prend brut....
    J'ai même créé l'exécutable, puis le lancer à partir d'une fenêtre DOS, lorsque j'appuie sur mon bouton 2 le message est bien retourné dans la Fenêtre DOS.

    En revanche si je veux l'adapter comme mes programmes, là ça ne foctionne plus, aucun message n'apparait dans la fenêtre DOS, et le processus reste actif.

    Voici ma modif :
    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
    Private Sub form_load()
    Dim A As Integer, B As Integer, C As Integer
    Dim Msg$
    A = 10: B = 0
    On Error Resume Next
    C = A / B
    If Err <> 0 Then
    MsgBox "erreur"
     Msg$ = CStr(Err.Number) & " - " & Err.Description
     Err.Clear
     Msg$ = Msg$ & " Appli " & Me.Caption
     Msg$ = "SET MeeRR=" & Msg$
     DoEvents
     
     On Error GoTo GestErr
     AppActivate "cmd.exe", True
     SendKeys Msg$ & Chr$(13), True
     Label1 = "C'est fait"
     
    End If
    End
    Exit Sub
    GestErr:
    Label1 = "pas bon"
    End
    End Sub
    Biensûr je crée un exécutable que je lance à partir d'une fenêtre DOS, et là ça ne marche pas....

    Est-ce que tu vois pourquoi?

    Merci.

    Coin.

  19. #19
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 092
    Points : 16 606
    Points
    16 606
    Par défaut
    Si le programme boucle, c'est que le nom du titre de la fenêtre DOS appelé par AppActivate n'est pas bon.
    Il faudrait être sûr du nom du titre de la fenêtre DOS, surtout que AppActivate "TitreFenetre", True, conduit a repeter indefiniment la commande AppActivate.
    Une idée , comme sa, resterait peut être une possibilité de faire rechercher le titre de cette fenêtre DOS par le programme qui à créé l'erreur, a condition qu'il n'y ai qu'une seul fenêtre DOS en cours, ou au moins un mot du titre soit connue .... .
    Le titre de la fenêtre DOS est-il toujours le même, ou un mot apparet-il toujours dans ce titre?

  20. #20
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Points : 87
    Points
    87
    Par défaut
    Le problème ne vient pas du nom de la fenêtre DOS, car lorsque je cré un exécutable de ton programme (pas charger dans le load)) cela fonctionne :
    Le message apparaît dans la fenêtre dos (d'où j'ai lancé l'exécutable) quand j'appuie sur le bouton 2.

    Le problème viendrai plus du fait de mettre cette instruction dans le sub load du formulaire !!!

    Est ce que le faite de mettre l'instruction dans le load me ferai boucler mon programme.....

    Coin.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP 5.0] Programmer l'exécution d'une Page
    Par Narutosaad dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2010, 10h03
  2. Exécution lorsque une valeur change parmi une plage
    Par Janny dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/05/2009, 13h56
  3. Réponses: 3
    Dernier message: 14/12/2006, 11h46
  4. [Débutant] Utilisation d'une valeur de la zone de texte dans une requête
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 13/07/2006, 10h42
  5. Réponses: 7
    Dernier message: 26/10/2004, 11h02

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