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 :

[VB6] Pb avec Shell


Sujet :

VB 6 et antérieur

  1. #1
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Points
    739
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Par défaut [VB6] Pb avec Shell
    Bonjour à toutes et à tous,

    J'ai un petit (gros) souci avec Shell comme indiqué dans le titre.

    En effet, je souhaite, à partir d'une application VB lancer un autre programme (exécutable). Pour cela, et suivant les indications de la FAQ, j'utilise la fonction Shell de la manière suivante :
    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
    Private Const PathSep = "\" 'Séparateur répertoire
    Public hwndSim As Long
     
    Private Sub LanceSim()
    Dim fs
     
        Set fs = CreateObject("Scripting.FileSystemObject")
     
        If fs.FileExists(app.Path & PathSep & "dymosim.exe") Then 'Je contrôle l'existense de l'exécutable
            hwndSim = Shell(app.Path & PathSep & "simulation.exe", vbNormalFocus) 'Je lance le programme
    '        AppActivate hwndSim 'Ceci était indiqué dans l'aide MSDN pour activer l'application mais ça ne marche pas
        Else 'Sinon message d'erreur
            MsgBox "Erreur simulation impossible", vbCritical
        End If
    End Sub
    Le code fonctionne mais (forcément il a un mais sinon il n'y aurait pas de post) la fenêtre d'exécution disparaît immédiatement après le lancement du programme et le programme ne s'exécute pas d'où mon problème.

    Comment peut-on faire pour garder la fenêtre active ou y-a-t'il un autre moyen de lancer l'exécution d'un programme.

    Merci d'avance

    +

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  2. #2
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Points
    739
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Par défaut
    Voilà, je me réponds à moi même ...

    J'ai trouvé une solution qui me convient puisqu'elle permet de faire fonctionner correctement mon appli même si je ne suis pas complètement satisfait car je n'ai pas d'explication de pourquoi ça ne marche pas ...

    Voici la solution que j'ai implémentée:
    Dans les déclarations :
    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
    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
     
    Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, _
                                                                        ByVal lpString As String, _
                                                                        ByVal cch As Long) As Long
     
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
                                                                    ByVal wParam As Long, _
                                                                    lParam As Any) As Long
    Private Const WM_CLOSE = &H10
    Private Const GWL_STYLE = (-16)
    Private Const WS_SYSMENU = &H80000
     
    Private AppCible As String
    Je mets aussi le code pour arrêter l'exécution en cours d'utilisation
    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
     
    Public Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
     
    Dim buf As String * 256
    Dim Titre As String
    Dim Longueur As Long
     
    'Récupère le titre de la fenêtre
    Longueur = GetWindowText(app_hWnd, buf, Len(buf))
    Titre = Left$(buf, Longueur)
     
    'Vérifie si le titre de la fenêtre correspond au nom recherché
    If InStr(Titre, AppCible) <> 0 Then
        'Ferme la fenêtre
        SendMessage app_hWnd, WM_CLOSE, 0, 0
    End If
     
    'Poursuit l'énumération
    EnumCallback = 1
     
    End Function
     
    Public Sub KillAppTxt(App_Cherchee As String)
     
    AppCible = App_Cherchee
    'Demande à Windows d'énumérer les fenêtres ouvertes
    EnumWindows AddressOf EnumCallback, 0
     
    End Sub
    Et le code exécuter pour lancer l'application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub LanceSim()
    Dim fs
    Dim Flect
    Dim chlue As String
    Dim testFiles As Boolean
     
        Set fs = CreateObject("Scripting.FileSystemObject")
     
        If fs.FileExists(app.Path & PathSep & "simulation.exe") Then
            hwndSim = ShellExecute(app.hInstance, "open", app.Path & PathSep & "dymosim.exe", "", app.Path, 1)
        Else
            MsgBox "Erreur simulation impossible", vbCritical
        End If
    End Sub
    Et l'arrêter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub StopSim()
        KillAppTxt app.Path & PathSep & "simulation.exe"
    End Sub
    Rmq: une chance pour l'arrêt en cours d'utilisation, l'application lancée ouvre une fenêtre dos dont le nom correspond au répertoire de travail et au nom de l'exécutable ...

    Voilà mais je suis qu'en même preneur des infos dont les gens peuvent disposées sur le pourquoi du comment ça ne fonctionne pas avec Shell

    Merci à tous

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

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

Discussions similaires

  1. [VB6] Lancer un exécutable avec Shell
    Par david71 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/07/2007, 15h48
  2. [VB6] Probleme avec commande SHELL
    Par Oseval dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/08/2006, 18h13
  3. [VB6]Prob avec les requêtes multiples
    Par cammipascal dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 30/03/2004, 19h46
  4. [VB6] Multiselection avec CTRL dans une msflexgrid
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/04/2003, 11h57
  5. [VB6] Problèmes avec ListView
    Par FlopErik dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/03/2003, 17h33

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