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 :

Comment afficher un bouton oui/non à la fin d'un shell ?


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut Comment afficher un bouton oui/non à la fin d'un shell ?
    bonjour

    Mon application synchrone Shell s'exécute sous VB6.

    A la fin Shell rend la main => Comment afficher (sous VB6) à ce moment précis un cadre avec deux bouton oui/non pour valider le résultat?

    Mon programme synchrone test 'shell':

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
     Private Type STARTUPINFO
          cb As Long
          lpReserved As String
          lpDesktop As String
          lpTitle As String
          dwX As Long
          dwY As Long
          dwXSize As Long
          dwYSize As Long
          dwXCountChars As Long
          dwYCountChars As Long
          dwFillAttribute As Long
          dwFlags As Long
          wShowWindow As Integer
          cbReserved2 As Integer
          lpReserved2 As Long
          hStdInput As Long
          hStdOutput As Long
          hStdError As Long
       End Type
     
       Private Type PROCESS_INFORMATION
          hProcess As Long
          hThread As Long
          dwProcessID As Long
          dwThreadID As Long
       End Type
     
       Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
          hHandle As Long, ByVal dwMilliseconds As Long) As Long
     
       Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
          lpApplicationName As String, ByVal lpCommandLine As String, ByVal _
          lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
          ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
          ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _
          lpStartupInfo As STARTUPINFO, lpProcessInformation As _
          PROCESS_INFORMATION) As Long
     
       Private Declare Function CloseHandle Lib "kernel32" _
          (ByVal hObject As Long) As Long
     
       Private Declare Function GetExitCodeProcess Lib "kernel32" _
          (ByVal hProcess As Long, lpExitCode As Long) As Long
     
       Private Const NORMAL_PRIORITY_CLASS = &H20&
       Private Const INFINITE = -1&
     
       Public Function ExecCmd(cmdline$)
          Dim proc As PROCESS_INFORMATION
          Dim start As STARTUPINFO
     
          ' Initialize the STARTUPINFO structure:
          start.cb = Len(start)
     
          ' Start the shelled application:
          ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, _
             NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)
     
          ' Wait for the shelled application to finish:
             ret& = WaitForSingleObject(proc.hProcess, INFINITE)
             Call GetExitCodeProcess(proc.hProcess, ret&)
             Call CloseHandle(proc.hThread)
             Call CloseHandle(proc.hProcess)
             ExecCmd = ret&
       End Function
    'pour arrêter un process shell autrment que par CTRL-C
     
     
    Public Function KillProcess(ByVal ProcessName As String) As Boolean
        Dim svc As Object
        Dim sQuery As String
        Dim oproc
        Set svc = GetObject("winmgmts:root\cimv2")
        sQuery = "select * from win32_process where name='" & ProcessName & "'"
        For Each oproc In svc.execquery(sQuery)
            oproc.Terminate
        Next
        Set svc = Nothing
    End Function
    Sub Form_Click()
          Dim retval As Long
          retval = ExecCmd("notepad.exe")
          MsgBox "Process Finished, Exit Code " & retval
       End Sub
    Explication du fonctionnement : Lancer le programme avec F5 (run) et cliquer sur le form avec la souris pour voir NOTE. Tant que NOTE n'est pas fermé rien ne se passe en VB6 (normal on est en mode synchrone).

    Merci pour vos idées.

    A vous lire
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Bonjour;
    Il me semble avoir vu ce même code(ou presque) ICI
    Comment afficher (sous VB6) à ce moment précis un cadre avec deux bouton oui/non pour valider le résultat
    De quel résultat s'agit-il ?
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    bonsoir,

    J'ai oublié le code .vbp dans le form! Excuses !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Private Sub Form_Load()
    ExecCmd "Calc.exe"
    ExecCmd "C:\sbwin\py461usr\pywin64.exe" '-maxmem 4096000  + c:\sbwin\hninp.txt"
        ExecCmd App.Path & "\RunMe.Doc"
        MsgBox "Programme fermé"
        End
    End Sub
    Le MsgBox fonctionne en mode validation seulement.

    Autre observation curieuse :

    curieusement si j'utilise la ligne ExecCmd "C:\sbwin\py461usr\pywin64.exe -maxmem 4096000 + c:\sbwin\hninp.txt"

    Le programme plante avec une erreur : "Vérifier que vous avez rentré le nom exact. " bizarre dans mon programme majeur c'est écrit de la même façon et ça marche (copie/collé).

    a+
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    curieusement si j'utilise la ligne ExecCmd "C:\sbwin\py461usr\pywin64.exe -maxmem 4096000 + c:\sbwin\hninp.txt"
    D'abord il faut voir si le programme pywin64.exe accepte plus d'un argument.
    Ensuite, quand tu écris :pywin64.exe -maxmem 4096000 + c:\sbwin\hninp.txt cela fait une concaténation c-à-d : l'argument passé au programme devient pywin64.exe -maxmem 4096000c:\sbwin\hninp.txt et puisqu'il y a un espace entre -maxmem et le reste de la chaine, cela fait un autre argument.

    S'il s'agit d'un autre argument, il faut remplacer le + par un espace pour avoir :
    ExecCmd "C:\sbwin\py461usr\pywin64.exe -maxmem 4096000 c:\sbwin\hninp.txt". (3 arguments au total)
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  5. #5
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonjour

    Merci pour l'explication. effectivement pywin64.exe n'accepte qu'une seule instruction CTRL-C pour arrêter ce programme C. Concernant l'écriture je pense que tu a vu juste et je vais en tenir compte.

    Donc il n'y a pas de solution 'propre' pour arrêter le programme avec la souris. Je mettrais un textbox pour l'utilisateur lui indiquant de saisir CTRL-C pour arrêter le programme.

    Encore merci et bon WE !
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  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
    Bonjour,

    Une solution simple pour afficher l'éditeur de texte et attendre sa fermeture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Dim f As String
     
        f = Chr(34) & EnvironEx("%systemroot%") & IIf(Win64, "\SysWOW64", "\system32") & "\notepad.exe" & Chr(34)
     
        If Shell2(f, f, -1) > 0 Then
            MsgBoxW "End shell2"
        End If

  7. #7
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonjour

    Merci Darkvader pour cette proposition. comment défini-tu la procédure EnvironEx ? code ?

    a+
    La Connaissance est comme le rire elle est contagieuse en la partageant!

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

Discussions similaires

  1. Comment créer un MsgBox oui/non
    Par JenTry dans le forum IHM
    Réponses: 4
    Dernier message: 24/08/2016, 15h05
  2. [Débutant] En ASP.NET, comment afficher un messagebox avec deux boutons OUI/NON?
    Par ronot dans le forum ASP.NET
    Réponses: 2
    Dernier message: 29/01/2013, 16h29
  3. Réponses: 3
    Dernier message: 18/04/2011, 09h57
  4. [E-O7] boite de dialogue avec bouton oui / non
    Par clarisse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/12/2008, 07h43
  5. Message à 3 boutons : Oui/Non/Annuler
    Par Gildesam dans le forum 4D
    Réponses: 1
    Dernier message: 16/09/2008, 10h16

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