Fermer un programme, une application, une fenêtre... d'après une partie de son nom

Soyez le premier à donner votre avis sur cette source.

Vue 7 751 fois - Téléchargée 646 fois

Description

Permet en quelques lignes de fermer un programme, une application, une fenêtre... en passant en paramètre son nom exact ou partiel.

Source / Exemple :


Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag 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 GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Sub FermeFentre(NomPartielDeLaFenetreAFermer As String, tHwnd As Long)
Dim NomFenetre As String
    
    'Liste toutes les fenetres
    Do While tHwnd <> 0
        NomFenetre = Space$(GetWindowTextLength(tHwnd))
        GetWindowText tHwnd, NomFenetre, Len(NomFenetre) + 1
        
        If InStr(1, NomFenetre, NomPartielDeLaFenetreAFermer) <> 0 Then 'c'est la fenetre recherchée
            'ferme la fenetre
            PostMessage tHwnd, &H10, 0, 0
            
            Exit Sub 'pas la peine de continuer (sauf si vous cherchez plusieurs fenetres avec ce nom)
        End If
        
        'initialise le test de la fenetre suivante
        tHwnd = GetNextWindow(tHwnd, 2)
    Loop
    
    MsgBox "La fenêtre demandée n'a pas été trouvée.", vbExclamation 'si vous avez laissé le exit sub
End Sub

Conclusion :


inspiré de la source d'Antislash : http://www.vbfrance.com/codes/MASQUER-AFFICHER-FERMER-FENETRES-ACTIVES_4596.aspx

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
50
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
22 août 2009

On parle ici de ce que tu as fait mais pas de ce que je sais ou ce que je dois faire.
Messages postés
18
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
4 octobre 2007

J'ai mis un code allant à l'essentiel de sa fonctionnalité pour plus de lisibilité. Evidemment qu'une gestion d'erreur est nécessaire, ainsi qu'un test sur le paramètre... mais pour cela il va falloir te sortir les doigts et faire un peu plus qu'un copier-coller.
Si tu veux une listbox pour choisir l'appli à fermer va voir le source d'Antislash http://www.vbfrance.com/codes/MASQUER-AFFICHER-FER MER-FENETRES-ACTIVES_4596.aspx
Messages postés
50
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
22 août 2009

Quand on exécute avec un nom partiel tel que décrit dans le premier paramètre, c'est ton application qui est fermée avec une erreur: La fenêtre est invisible mais reste chargée en mémoire. Une gestion d'erreurs serait indispensable.
Donc l'idée de Renfield est à voir et appliquer.
Tu pourras peut-être ajouter une ListBox pour y mettre les fenêtres actives et choisir celle(ou celles) qu'on veut fermer.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Dommage qu'il faille fournir un hWnd a la base, ca perd de snon interet...

peut etre passer par un EnumWindows

pour scanner toutes les fenetres ouvertes...
Messages postés
18
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
4 octobre 2007

Exact, on peut remplacer :
PostMessage FindWindow(IDfenetre, NomFenetre), &H10, 0, 0
par :
PostMessage tHwnd, &H10, 0, 0
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.