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.NET Discussion :

Récupérer le contenu d'une variable d'un script VBS dans un programme VB.Net


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Astronome amateur
    Inscrit en
    Juillet 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Astronome amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 63
    Par défaut Récupérer le contenu d'une variable d'un script VBS dans un programme VB.Net
    Bonjour à tous

    Faisant suite à l'exposé d'un premier problème lié au développement d'un programme de pilotage d'une carte relais (code qui fonctionne une fois puis plus rien) : https://www.developpez.net/forums/d2...uis-plus-rien/ , J'en suis à traiter en parallèle des solutions alternatives.

    L'objectif étant de pouvoir commuter des relais (carte à 16 relais) via un interface que j'ai développé en VB.Net, et vu que mon code actuel pose soucis, j'ai trouvé l'action palliative qui fait appel à l’exécution de scripts VBS externe au programme. J'arrive actuellement à réaliser la commutation de n'importe quel relais en déclenchant le script VBS en lui transférant le numéro du relais à commuter.

    A contrario, en interrogeant la carte, il est possible d'avoir l'état de commutation des 16 relais. Il suffit d'envoyer une commande html http://192.168.1.4/30000/99 pour récupérer une chaine de caractère contenant l'état des relais.
    Mon script VBS qui se nomme "Etat_relais.vbs" et qui se trouve actuellement à la racine du disque E est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim aXMLHTTP, aURL
    aURL = "http://192.168.1.4/30000/99"
    set aXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    Call aXMLHTTP.Open("GET", aURL, False)
    Call aXMLHTTP.send()
    Call MsgBox(mid(aXMLHTTP.responseText, 21,16)) ' Extraction d'une chaine de 16 caractères à partir du 21ème pour n'avoir que l'état des relais.
    set aXMLHTTP = Nothing
    Pour le moment, je visualise le résultat (une chaine de 16 caractères 0 ou 1 qui traduisent l'état réel des relais) dans un MsgBox pour vérifier le bon fonctionnement du script.

    Dans mon programme VB.Net, j'exécute les lignes suivantes pour lancer le script VBS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Etat_Rel
    Dim p As New System.Diagnostics.Process()
    p.StartInfo.FileName = "E:\Etat_relais.vbs"
    p.Start()
    Ma question est comment récupérer cette variable dans mon code VB.Net afin de la traiter ? J'ai passé beaucoup de temps à chercher (peut-être mal) et j'ai trouvé certaines solutions entre de l'exe, du bat, ... Mais entre VBS et VB.Net, rien !

    Merci pour votre aide

    Jean-Pierre

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Re-Bonjour,

    Pour cette question, je ferais simple (même si ce n'est pas très élégant ... )

    Tu peux certainement écrire un fichier TXT en VB script et en VB.Net, tu peux lire un fichier TXT (StreamReader).
    Dès lors pourquoi ne pas écrire ta chaine d'états des relais en srcipt et la relire en VB.Net ?

    Mais tu recevras sans doute une meilleure réponse de la part d'un connaisseur en VB script ...


  3. #3
    Membre averti
    Homme Profil pro
    Astronome amateur
    Inscrit en
    Juillet 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Astronome amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 63
    Par défaut
    Re-bonjour Phil
    Effectivement, cette solution est possible. Je vais la tester et la garder sous le coude, car je suis persuadé qu'il existe un moyen "standard" pour récupérer aisément la valeur. Après tout, j'arrive bien à envoyer une valeur entre mon programme en VB.Net et le script VBS, il doit bien y avoir la fonction miroir.
    Comme variante de ta solution, j'ai également pensé à la sauvegarde de la variable dans un registre. Je stocke déjà actuellement des données dans les registres pour mes programmes, c'est simple et efficace.

    Bon, on va attendre d'autres propositions.

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bien sûr, si tu es à l'aise avec les registres, c'est mieux que le fichier TXT !

  5. #5
    Membre averti
    Homme Profil pro
    Astronome amateur
    Inscrit en
    Juillet 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Astronome amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 63
    Par défaut
    J'ai testé ton idée mais avec l'utilisation d'une clé de registre, et ça fonctionne nickel. J'ai de toute façon une trentaine de clés déjà occupées dans ce registre pour cette application.

    Le script VBS qui me permet d'interroger la carte puis l'écriture de la valeur des 16 relais dans une clé de registre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim aXMLHTTP, aURL, ObjetRegedit, Etat
    aURL = "http://192.168.1.4/30000/99" ' envoi de la commande pour obtenir l'état des relais
    set aXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    Call aXMLHTTP.Open("GET", aURL, False)
    Call aXMLHTTP.send()
    Etat = mid(aXMLHTTP.responseText, 21,16)
    set aXMLHTTP = Nothing
    On Error Resume Next
    set ObjetRegedit =  CreateObject("WScript.Shell" )
    CleRegistre = "HKEY_CURRENT_USER\Software\Pilotage_JPBox3\Etat_Relais" ' on crée la clé de registre dans le registre ad'hoc
    ObjetRegedit.RegWrite CleRegistre, Etat
    Set ObjetRegedit = Nothing
    WScript.Quit
    Et le bout de code VB.Net qui me permet de lancer le script et de récupérer le contenu de la clé de registre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private Sub Etat_relais()
            Dim p As New System.Diagnostics.Process()
            p.StartInfo.FileName = "E:\Etat_relais.vbs"
            p.Start() ' On exécute le script VBS qui récupère l'état des relais et qui enregistre la valeur dans un registre
            key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\Pilotage_JPBox3")
            Etat_Rel = CType(key.GetValue("Etat_Relais"), String) ' On récupère la valeur contenue dans la clé de registre
        End Sub
    Merci Phil pour ton idée.

    Cette solution me permet de continuer le développement de mon petit programme en attendant une solution plus adaptée au problème de fond.

Discussions similaires

  1. Récupérer le contenu d'une variable quotée
    Par wayat91 dans le forum VBScript
    Réponses: 3
    Dernier message: 04/03/2011, 11h01
  2. Récupérer le contenu d'une variable ParamDisplayValue
    Par olivier.x dans le forum Cognos
    Réponses: 7
    Dernier message: 05/01/2011, 14h31
  3. Réponses: 5
    Dernier message: 08/01/2010, 20h26
  4. [MySQL] récupérer le contenu d'une variable
    Par nisa83 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/04/2009, 23h07
  5. Récupérer le contenu d'une variable d'environnement locale
    Par Cricket dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 01/02/2008, 16h38

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