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 :

Problème pour exécuter plusieurs fichiers VBS dans une application Visual Basic


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 23
    Points
    23
    Par défaut Problème pour exécuter plusieurs fichiers VBS dans une application Visual Basic
    Bonjour,

    Je rencontre un petit problème dans mon application crée sur Visual Basic, je m'explique

    Voila j'ai crée une interface ou l'on peut choisir un ou plusieurs scripts vbs à exécuter en même temps.
    Pour cela, j'utilise des chekbox. Quand l'utilisateur coche la case, le script sera exécuté etc..

    Mon problème est que quand je veux exécuter les scripts, une fenêtre s'affiche en me demandant si je veux Ouvrir, Enregistrer ou Annuler et une seconde fenêtre me demande si je veux l'exécuter ou non car l'éditeur est inconnue.

    Voici le code que j'utilise dans mon application pour provoquer cette action.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If ShellExecute(Handle, "explorer", r, vbNullString, _
                                 "C:\", SW_SHOWNORMAL) <= 32 Then
                        MsgBox("erreur")
    End If
    "r" représente le nom de mon fichier vbs

    J'ai testé avec la commande open à la place de explorer mais rien ne se passe.

    Comment peux t'on désactiver ces alertes afin que les scripts vbs soient exécuter en toutes transparences?

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,
    avec open comme paramètre, ton code devrait fonctionner -
    Es-tu sur que SW_shownormal vaille 1 sinon il s'exécute en mode caché (0) ?
    Sinon, essaye avec une chaine vide à la place de open.


    PS : si tu exécutes plusieurs scripts en cascade, il est probable qu'il soit utile d'utiliser shellexecute conjointement à waitforsingleobject.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Merci DarkVader d'avoir répondu

    J'ai testé tes recommandations mais le problème persiste.

    J'ai modifié la valeur de SW_SHOWNORMAL pour la mettre à 1 mais rien n'y fait
    Aussi j'ai testé en mettant une valeur null à la place de open mais rien non plus.

    La seul commande qui passe est explorer.

    J'ai effectué un autre test avec une autre application pour ouvrir par exemple IE8 mais rien non plus.

    Ah j'oublié de préciser, je suis débutant !!!

    J'ai regardé dans plusieurs forums et la solution est d'utiliser open comme paramètre.

    Je pense qu'il doit manquer quelque chose à mon code

    Voici les paramètres que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Const SW_SHOWNORMAL = 1
        Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal _
                                                                                       lpOperation As String, ByVal _
                                                                                       lpFile As String, ByVal _
                                                                                       lpParameters As String, ByVal _
                                                                                       lpDirectory As String, ByVal _
                                                                                       nShowCmd As Long) As Long
        Public i As Integer
        Private Const GWL_STYLE As Long = -16
    et voila comment j'exécute le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If ShellExecute(Handle, "explorer", r, vbNullString, _
                                 "C:\", SW_SHOWNORMAL) <= 32 Then
                        MsgBox("erreur")
    End If

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par zaza78 Voir le message
    .../...
    Aussi j'ai testé en mettant une valeur null à la place de open mais rien non plus.

    La seul commande qui passe est explorer.
    .../...
    Rien ou un message d'erreur ?
    Tel que tu le décris il semblerait qu'il s'agisse d'un problème d'association dans la base de registre
    (=> erreur 31 en retour à vérifier)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    Rien ou un message d'erreur ?
    Tel que tu le décris il semblerait qu'il s'agisse d'un problème d'association dans la base de registre
    (=> erreur 31 en retour à vérifier)
    Bonjour DarkVader

    Et bien pour information je n'ai aucun message d'erreur. J'ai l'impression qu'il ne reconnait pas la commande OPEN. Mon fichier est à la racine "C:\".

  6. #6
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim ret as long
    ret=ShellExecute(Handle, "explorer", r, vbNullString, "C:\", SW_SHOWNORMAL)
    msgbox "1: " & ret
    
    ret=ShellExecute(Handle, "open", r, vbNullString, "C:\", SW_SHOWNORMAL)
    msgbox "2: " & ret
    C'est le code de retour qu'il faut connaitre.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim ret as long
    ret=ShellExecute(Handle, "explorer", r, vbNullString, "C:\", SW_SHOWNORMAL)
    msgbox "1: " & ret
    
    ret=ShellExecute(Handle, "open", r, vbNullString, "C:\", SW_SHOWNORMAL)
    msgbox "2: " & ret
    C'est le code de retour qu'il faut connaitre.
    Merci

    J'ai testé tes deux commandes et j'ai bien un code en retour, mais je vais te paraitre un peu bizarre, mais que représente le code en retour de la commande ?

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    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 077
    Points : 17 182
    Points
    17 182
    Par défaut
    ALLAPI
    Citation Envoyé par ALLAPI
    Valeurs de retour
    Si la fonction réussit, la valeur de retour est le handle d'instance de l'application qui a été exécuté, ou le manche d'un échange dynamique de données (DDE) du serveur d'applications.
    Si la fonction échoue, la valeur de retour est une valeur d'erreur est inférieure ou égale à 32. Le tableau suivant présente ces valeurs d'erreur:
    0 Le système d'exploitation n'a plus de mémoire ou de ressources.

    ERROR_BAD_FORMAT (11&)
    Le fichier. EXE est invalide (non-Win32. EXE ou erreur dans. Image EXE).

    SE_ERR_ACCESSDENIED (5)
    Le système d'exploitation refuser l'accès au fichier spécifié.

    SE_ERR_ASSOCINCOMPLETE (27)
    L'association nom de fichier est incomplète ou invalide.

    SE_ERR_DDEBUSY (30)
    La transaction DDE n'a pas pu être terminée, car d'autres opérations DDE étaient en cours de traitement.

    SE_ERR_DDEFAIL (29)
    La transaction DDE a échoué.

    SE_ERR_DDETIMEOUT (28)
    La transaction DDE n'a pas pu être terminée, car la demande a expiré.

    SE_ERR_DLLNOTFOUND (32)
    La bibliothèque de liens dynamiques spécifié est introuvable.

    SE_ERR_FNF (2)
    Le fichier spécifié est introuvable.

    SE_ERR_NOASSOC (31)
    Il n'existe aucune application associée à l'extension de fichier donnée.

    SE_ERR_OOM (8)
    Il n'y avait pas assez de mémoire pour terminer l'opération.

    SE_ERR_PNF (3)
    Le chemin d'accès spécifié est introuvable.

    SE_ERR_SHARE (26)
    Une violation de partage s'est produite.
    Je pense que DarkVader va te demander quels codes tu as eu en retour
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Bonjour ProgElecT,

    Alors concernant le message d'erreur, je n'ai toujours rien. Je m'explique

    Voila j'ai testé les deux commandes que DarkVader m'a proposé et voici les résultats :
    Pour le 1er msgbox --> 1: 317785265886199810

    Pour le 2nd msgbox --> 2: 227994735430598658

    Je ne sais pas à quoi corresponds ces deux codes mais en tt cas je n'ai aucuns messages du type "erreur ......".

    Pour revenir sur mon code
    j'ai crée un forms
    Avec les paramètres suivants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Class Form1
     
        Const SW_SHOWNORMAL = 1
        Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal _
                                                                                       lpOperation As String, ByVal _
                                                                                       lpFile As String, ByVal _
                                                                                       lpParameters As String, ByVal _
                                                                                       lpDirectory As String, ByVal _
                                                                                       nShowCmd As Long) As Long
     
        Public i As Integer
        Const GWL_STYLE As Long = -16
    Ensuite je fais un banal test pour exécuter mon fichier de type "VBS"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ShellExecute(Handle, "open", "C:\test.vbs", vbNullString, _
                                 "C:\", SW_SHOWNORMAL) <= 32 Then
                        MsgBox("erreur")
    Voila.
    Juste pour information j'ai testé une autre commande afin d'ouvrir par exemple "notepad.exe " avec la commande suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ret As Long
    ret = Shell("notepad.exe", vbNormalFocus)
    Et sa marche !!!
    A j'oublié je développe sur Visual Basic 2008 Express Studio
    Donc pouvez-vous me dire si les déclarations sont correctes ou non ? Ou bien me proposer une autre solution plus adéquate à mon problème !!

  10. #10
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    C'est sur que si tu travailles en .net, les déclarations en Long ne vont pas le faire
    Va voir sur le forum dédié.

    PS: Penses aux balises de code.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Bonjour DarkVader

    J'ai réussi à résoudre mon problème, logique puisque je n'étais pas au bon endroit .

    Mais je tiens quand même à donner la réponse

    Alors la méthode la plus simple est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Process.Start("C:\test.vbs")
    Voila et merci pour ton aide !!

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

Discussions similaires

  1. Flash dans une application visual basic
    Par avinain dans le forum VBScript
    Réponses: 3
    Dernier message: 03/08/2011, 22h30
  2. [XL-2003] Problème pour renommer un fichier à partir d'une variable contenu dans une cellule
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/05/2010, 11h43
  3. Réponses: 1
    Dernier message: 04/02/2010, 20h41
  4. Problème pour réduire le fichier log d'une base
    Par Oluha dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 22/06/2006, 16h01
  5. [HTML] Ouvrir plusieurs fichiers pdf dans une page
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/05/2006, 09h34

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