Fermer tous les programmes sauf le miens

Résolu
cs_Lapin26 Messages postés 25 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 23 janvier 2008 - 20 juin 2007 à 17:04
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 22 juin 2007 à 00:11
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

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 juin 2007 à 16:27
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é)
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 juin 2007 à 17:12
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
0
cs_Lapin26 Messages postés 25 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 23 janvier 2008
20 juin 2007 à 17:14
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...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 juin 2007 à 17:19
:-/  admettons....

ce genre de manie destructrice me laissera toujours koi

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Lapin26 Messages postés 25 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 23 janvier 2008
20 juin 2007 à 17:49
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 ?
0
cs_Lapin26 Messages postés 25 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 23 janvier 2008
21 juin 2007 à 11:57
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...
0
cs_Lapin26 Messages postés 25 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 23 janvier 2008
21 juin 2007 à 12:15
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
0
cs_Lapin26 Messages postés 25 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 23 janvier 2008
21 juin 2007 à 12:19
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...
0
cs_Lapin26 Messages postés 25 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 23 janvier 2008
21 juin 2007 à 16:39
Merci beaucoup rt15 !

Je pense que ça va marcher comme ça !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 juin 2007 à 00:11
"je piges rien aux parametres"

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

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Rejoignez-nous