Fermer tous les programmes sauf le miens [Résolu]

Signaler
Messages postés
25
Date d'inscription
lundi 14 mai 2007
Statut
Membre
Dernière intervention
23 janvier 2008
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour, je fais de nouveau appel à vous car j'ai trouvé comment fermer tous les programmes (d'une manière un peu bourrine certes, mais ça marche) mais maintenant le problème est que ça ferme aussi mon application, ce que je ne veux pas !

Voila mon code :


Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 Const WM_CLOSE = &H10

Private Sub Command1_Click()
    Dim Handle_prj As Long
    Handle_prj = FindWindow(vbNullString, App.Title)
    Dim hwnd As Long
    For hwnd = 1 To 100000  'dsl pour l'aspect bourrin mais à mon niveau jtrouve pas mieux
        If hwnd <> 0 And hwnd <> Handle_prj Then
            Call PostMessage(hwnd, WM_CLOSE, 0, 0)
        End If
    Next hwnd
    frm_principal.Show
End Sub



Je m'en remets à votre infini savoir...

Merci !

10 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Salut,

ptdr sur ton bout de code Lapin26 ! Le For hwnd = 1 To 100000 est effectivement assez manifique.
Un exemple de EnumWindows.
(Le lien en avant dernière ligne).

La fonction EnumWindow prend en argument l'adresse d'une routine. Cette routine serat appelée par windows pour toutes les fenêtres qui t'intéressent.

Toutes les fenêtres sont identifiée par un handle qui est passé en argument sous le doux nom de hwnd.
Le hanlde de la fenêtre de ton appli est récupérable comme une propriété. Je sais plus comment elle s'appelle... hanlde ou hwnd, qqch comme ça. (form1.hwnd).

Donc dans la fonction qui est appelée avec le handle de toutes les fenêtres, tu compare avec la tienne, et si c'est pas le même, tu fais ton PostMessage.

PublicFunction EnumWindowsProc(ByVal hwnd AsLong, ByVal lParam AsLong) AsBoolean
    if hwnd <> form1.hwnd then PostMessage hwnd, WM_CLOSE, 0, 0

EndFunction

(Non testé)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
voir la fonction EnumWindows

ensuite tu testes le threadId de la fenetre trouvée pour comparer au threadId de ton appli, pour ne fermer que ton appli.
je serais quand même curieux de savoir pourquoi t souhaites tout fermer si brutalement...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
25
Date d'inscription
lundi 14 mai 2007
Statut
Membre
Dernière intervention
23 janvier 2008

LOL, parceque j'ai pas envie que quelqu'un puisse continuer à utiliser le PC après un certain temps sans pour autant avoir à l'éteindre à chaque fois...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
:-/  admettons....

ce genre de manie destructrice me laissera toujours koi

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
25
Date d'inscription
lundi 14 mai 2007
Statut
Membre
Dernière intervention
23 janvier 2008

Comment on l'utilise cette API après l'avoir déclarée ?
Je pige rien aux paramètres utilisés...
Un ptit peu d'aide ?
Messages postés
25
Date d'inscription
lundi 14 mai 2007
Statut
Membre
Dernière intervention
23 janvier 2008

Normalement FindWindow est bien sensé me renvoyer le handle de ma fenêtre ? Je ne comprends pas pourquoi ça me la ferme quand même...
Messages postés
25
Date d'inscription
lundi 14 mai 2007
Statut
Membre
Dernière intervention
23 janvier 2008

En plus j'ai testé en essayant de récupérer le handle de mon programme et de fermer seulement celui-ci grâce au PostMessage avec ce handle en paramètre et ça marche
Messages postés
25
Date d'inscription
lundi 14 mai 2007
Statut
Membre
Dernière intervention
23 janvier 2008

Sinon avec le EnumWindow on fait comment ?
On doit stocker les données dans une espèce de tableau et tester les valeurs trouvés ou il y'a une forme de curseur ou quoi ?
Tout ce que je trouve sur le net à ce sujet c'est des codes d'au moins 100 lignes même pas expliqués...
Messages postés
25
Date d'inscription
lundi 14 mai 2007
Statut
Membre
Dernière intervention
23 janvier 2008

Merci beaucoup rt15 !

Je pense que ça va marcher comme ça !
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
"je piges rien aux parametres"

le site MSDN est là pour ca, tout y est expliqué

Renfield
Admin CodeS-SourceS- MVP Visual Basic