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 :

Fermer une application ouverte par la fonction shell


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 19
    Points
    19
    Par défaut Fermer une application ouverte par la fonction shell
    Bonjour,

    Je cherche à fermer une application préalablement ouverte par la fonction shell.
    Pour cela, j'ai trouvé dans la FAQ VB6 le code premettant de la faire :

    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
    Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
        Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, _
           ByVal lpdwprocessid As Long) As Long
        Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _
           ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, _
           ByVal nIndex As Long) As Long
        Private Const WM_CLOSE = &H10
        Private Const GWL_STYLE = (-16)
        Private Const WS_SYSMENU = &H80000
    
        Private Function CloseWindow(ByVal hwnd As Long, ByVal hInstance As Long) As Long
    
            Dim idproc As Long
    
            idproc = 0
    
            'reçoit dans idproc l'id du processus lié à cette fenêtre
            GetWindowThreadProcessId(hwnd, idproc)
            If (idproc = hInstance) And ((GetWindowLong(hwnd, GWL_STYLE) And WS_SYSMENU) = WS_SYSMENU) Then
                PostMessage(hwnd, WM_CLOSE, 0, 0)
            End If
    
            'obligatoire pour qu'EnumWindows continue l'énumération
            CloseWindow = True
    
        End Function
    
        Public Sub KillApp(ByVal hInstance As Long)
    
            EnumWindows(AddressOf CloseWindow, hInstance)
    
        End Sub
    Cependant, sous VB express 2010, le message d'erreur suivant apparait dans la liste des erreurs empechant la compilation (correspondant à la ligne en rouge ci-dessus):

    Impossible de convertir l'expression 'AddressOf' en 'Long', car 'Long' n'est pas un type délégué.
    Pouvez-vous m'aider à résoudre cette erreur ?

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Points : 254
    Points
    254
    Par défaut
    Bonjour,

    Utilise la balise CODE plutôt que QUOTE pour mettre du code stp.

    Pour ton appli, connais-tu le nom de l’exécutable à fermer ?
    Car si oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Dim p() As Process
            Dim r As Process
            p = Process.GetProcessesByName("Appli") 'Récupération de tous les process avec le nom de ton appli (SANS le .EXE)
            For Each r In p
                r.Kill() 'Kill chaque process
            Next
    Testé et fonctionnel.

    La réutilisation d'un grand nombre de codes VB6 en VB.Net n'est pas ce qu'il y a de mieux à mon avis car VB.Net intègre beaucoup plus de fonctionnalités avec un code plus simple (6 lignes ici contre 25 dans ton exemple).

    @+
    Mat

  3. #3
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut
    Bonjour,
    Je conseil toujours d'utilise process.Start plutot que shell
    exemple lancement de la calculette puis arret
    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
    Public Class Form1
        Public pInfo As New ProcessStartInfo()
        Public p As Process
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            pInfo.FileName = "C:\Windows\System32\calc.exe"
            'Start the process. 
            p = Process.Start(pInfo)
        End Sub
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            p.Kill()
        End Sub

Discussions similaires

  1. Fermer une application ouverte par code
    Par kracter56 dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/03/2013, 14h08
  2. Comment fermer un programme ouvert avec la fonction Shell
    Par nicolas2603 dans le forum VBA Access
    Réponses: 13
    Dernier message: 08/02/2008, 20h01
  3. Réponses: 2
    Dernier message: 06/02/2007, 17h18
  4. Positionner une fenêtre ouverte par un shell
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/12/2006, 08h33
  5. Réponses: 1
    Dernier message: 02/01/2006, 19h05

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