cs_Lapin26
Messages postés25Date d'inscriptionlundi 14 mai 2007StatutMembreDernière intervention23 janvier 2008
-
20 juin 2007 à 17:04
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 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
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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...
cs_Lapin26
Messages postés25Date d'inscriptionlundi 14 mai 2007StatutMembreDernière intervention23 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...
cs_Lapin26
Messages postés25Date d'inscriptionlundi 14 mai 2007StatutMembreDernière intervention23 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
cs_Lapin26
Messages postés25Date d'inscriptionlundi 14 mai 2007StatutMembreDernière intervention23 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...