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 :

Utilisation de l'API ExitProcess


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut Utilisation de l'API ExitProcess
    Bonjour,

    je lance un programme en utilisant l'API "CreateProcess", ca fonctionne.
    Je voudrais maintenant pouvoir fermer cette application proprement en utilisant l'API ExitProcess mais je coince la dessus.
    Si j'ai bien compris l'utilisation de cette API je dois fournir le handle de l'appli a fermer ainsi qu'un "code de sortie" ?
    Comment recuperer ces valeurs ?

  2. #2
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Salut
    Ceci pour t'aider, peut-être
    http://allapi.mentalis.org/apilist/ExitProcess.shtml

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Dans mes souvenirs,
    Dans les parametres de createprocess, il y a un parametre PROCESS_INFORMATION qui est reseigné par la fonction. (disons pi as PROCESS_INFORMATION)
    Pour terminer le process, il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
              CloseHandle pi.hThread
              CloseHandle pi.hProcess
    Close handle est une fonction de l'API

  4. #4
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Merci de vous etre interesse a ma question.

    Thierry, j'avais bien ces infos (j'aurais du le preciser), mais je ne m'en sortais pas. Delbeke m'a mis sur la piste, sa solution ne fonctionne pas (en tout cas telle que j'ai essaye de l'utiliser) mais c'est bien le parametre PROCESS_INFORMATION qu'il fallait utiliser.

    Au cas ou d'autres tenteraient de faire la meme chose, je donne ici le code qui me permet de lancer puis de fermer un process.

    Dans un module bas :

    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
    Option Explicit
     
    Public Const INFINITE = &HFFFF
    Public Const STARTF_USESHOWWINDOW = &H1
    Public Enum enSW
        SW_HIDE = 0
        SW_NORMAL = 1
        SW_MAXIMIZE = 3
        SW_MINIMIZE = 6
    End Enum
    Public Type PROCESS_INFORMATION
        hProcess As Long
        hThread As Long
        dwProcessId As Long
        dwThreadId As Long
    End Type
    Public 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 Byte
        hStdInput As Long
        hStdOutput As Long
        hStdError As Long
    End Type
    Public Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
    End Type
    Public Enum enPriority_Class
        NORMAL_PRIORITY_CLASS = &H20
        IDLE_PRIORITY_CLASS = &H40
        HIGH_PRIORITY_CLASS = &H80
    End Enum
     
    Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
    Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
    Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
    Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
    Sur une feuille avec 2 boutons de commande :
    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
     
    Option Explicit
     
    Dim pinfo As PROCESS_INFORMATION
    Dim pclass As Long
    Dim sinfo As STARTUPINFO
    'Not used, but needed
    Dim sec1 As SECURITY_ATTRIBUTES
    Dim sec2 As SECURITY_ATTRIBUTES
     
     
    Private Sub CmdStartProcess_Click()
    'Set the structure size
    sec1.nLength = Len(sec1)
    sec2.nLength = Len(sec2)
    sinfo.cb = Len(sinfo)
    'Set the flags
    sinfo.dwFlags = STARTF_USESHOWWINDOW
    CreateProcess vbNullString, "C:\Repertoire\MonProgramme.exe", sec1, sec2, False, pclass, 0&, "C:\Repertoire", sinfo, pinfo
    End Sub
     
     
    Private Sub CmdStopProcess_Click()
    Dim ExitCode As Long
    ExitCode = GetExitCodeProcess(pinfo.hProcess, 0)
    TerminateProcess pinfo.hProcess, ExitCode
    End Sub
    Merci encore !

  5. #5
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Je viens apporter une precision au code precedent. Jusqu'ici mes tests se faisaient sur un programme "simple" avec une seule fenetre.
    Le programme que je souhaite reellement ouvrir lance une seconde fenetre a son lancement et la, petit soucis, la fenetre principale disparaissait purement et simplement (tout en restant dans la liste des process actifs sous Windows)

    J'ai du supprimer la ligne suivante pour que tout rentre dans l'ordre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Set the flags
    sinfo.dwFlags = STARTF_USESHOWWINDOW
    Ca fonctionne donc mais pour etre honnete je ne vois pas trop pourquoi.
    Par simple curiosite, si vous avez une explication, je suis preneur.

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

Discussions similaires

  1. Comment utiliser Windows Shell API ?
    Par evlan dans le forum Windows
    Réponses: 1
    Dernier message: 11/02/2007, 22h38
  2. [VB.Net]Utilisation de l'API OOo
    Par DonF dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/01/2007, 13h13
  3. [SOAP] Utilisation de quelle API ?
    Par _beber85 dans le forum Services Web
    Réponses: 3
    Dernier message: 29/05/2006, 13h21
  4. [DOM] Utilisation de l'API DOM pour créer du HTML sous IE
    Par pedouille dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/01/2006, 14h48
  5. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26

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