clementio
Messages postés432Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 février 2014
-
11 août 2005 à 04:13
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
11 août 2005 à 18:32
Bonjour,
Voilà le problème:
J'encapsule la fenêtre de mon appli dans la fenêtre d'un logiciel commercial grâce à l'API SetParent (qui marche très bien ). Mon appli devient donc la fille de ce logiciel.
Le problème survient lors de la fermeture du logiciel, mon appli se bloque !!!
Et pourtant elle comporte un timer réglé à 1 seconde mais l'exécution du code ne passe plus dedans. Elle reste pourtant en execution puisqu'elle apparaît dans le gestionnaire de tâche.
Je voudrais evidemment qu'elle se ferme à la fermeture du logiciel.
Merci de m'aider, Clementio
PS: Je pense que la solution doit se trouver vers la récupération du message de fermeture du logiciel (hook du logiciel ou un truc comme ça mais je n'y arrive pas ).
clementio
Messages postés432Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 février 20141 11 août 2005 à 13:10
Salut,
Merci pour ta réponse Renfield.
Du coup nouvelle question:
Comment en connaissant le Handle d'une fenêtre on peut intercepter le WM_DESTROY de celle-ci (sans utiliser de dll de hook si possible)?
Et pis après tout si c'est pas possible sans cette dll, où puis-je en trouver une qui hook les messages d'une fenêtre extrene à mon appli (et pas du clavier ou de la souris, ça je m'en fiche...)?
En tou cas, c'est vraiment pourri, je pensais que le fait de fermer une fenêtre parent engendrait forcement la fermeture de toutes ces filles (ou au moins ses évènements de fermeture --> QueryUnload, Unload, Terminate)!!!
clementio
Messages postés432Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 février 20141 11 août 2005 à 14:13
Ca y est j'y suis arrivé. Si ça peut intéresser certains:
Dans mon Form
Private Sub Form_Load()
mHookId = SetWindowsHookEx(5, AddressOf VB_HOOKCBTPROC, 0, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx mHookId
End Sub
Et dans le module
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hMod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Function VB_HOOKCBTPROC(ByVal Code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Local Error Resume Next
If Code = 4 Then
Unload Form1
End If
CallNextHookEx mHookId, Code, wParam, lParam
End Function
Ainsi, lors de la fermeture de la fenêtre parent, mon appli (fille) se termine!!!