Hook et Abend Programme [Résolu]

Messages postés
330
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
26 octobre 2017
- - Dernière réponse : Cjvg
Messages postés
330
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
26 octobre 2017
- 6 août 2012 à 16:19
Bonjour,

J'utilise un Hook pour déplacer la barre de défilement d'un MSHflexgrid.
A la sortie du programme je neutralisant le Hook. Rien à signaler jusque là, le traitement se déroule correctement.

En cas de problème, le programme tombe en erreur et le Hook reste toujours actif.

Comment intercepter les abend pour neutraliser le hook avant de sortir proprement du programme (Le On error ne marche pas)

En l'absence de solution, j'abandonnerais malheureusement cette technique qui fonctionne parfaitement.

Par avance merci pour la réponse précise que vous me donnerais
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Le seul problème que je "vois" ne pourrait surgir qu'en mode run depuis l'IDE, pas en mode exécution.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour,
Difficile de te répondre avec si peu (et aucun code montré).
Les seules questions raisonnables dans ce cas sont :
- qu'est-ce qui, dans ton appli, pourrait selon toi en provoquer l'avortement
- si tu "harponnes" à une fin particulière, qu'as-tu prévu pour "déharponner" dès que cette fin avait été atteinte ? (quitte à "réharponner" dès qu'à nouverau nécessaire) ?
- les éventuels avortements de ton appli interviennent-ils depuis l'exe ou en mode run de l'IDE ?
- ton appli contient-elle une ou plusieurs instruictions END ? ou aucune ?
- à quoi touche exactement ton harpon ? (en détail)
- quel est ton OS ? je crois par exemple savoir que WIN 7 est, lui, capable de "déharponner" seul spontanément

"Harponner" est toujours assez acrobatique. Je ne connais personnellement pas de "harponnage" sans risques autre que lié à un fil (thread) bien défini. VB6 n'est pas le meilleur outil pour ainsi lier à un fil particulier.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
330
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
26 octobre 2017
0
Merci
qu'est-ce qui, dans ton appli, pourrait selon toi en provoquer l'avortement
- Je ne sais pas mais cela peut arriver demain, dans une semaine,dans un mois......

si tu "harponnes" à une fin particulière
- Non le programme permet à l'utilisateur de mettre à jour une Base

ton appli contient-elle une ou plusieurs instruictions END
- Aucune

à quoi touche exactement ton harpon
- Comme je l'ai dis: à la barre de défilement MSHflexgrid

quel est ton OS ?
- Windows XP et Vista

----------------------------------------------------------------------------------------------

Public Function GetMsgProc(ByVal nCode As Long, ByVal wParam As Long, lParam As MSG) As Long
Dim PosX As Long
Dim PosY As Long

If lParam.message = WM_MOUSEWHEEL Then
If Objet.Rows = Objet.FixedRows Then Exit Function

Feuille.ScaleMode = 3
PosX = lParam.pt.x - Feuille.ScaleX(Feuille.Left, vbTwips, vbPixels)
PosY = lParam.pt.y - Feuille.ScaleY(Feuille.Top, vbTwips, vbPixels)

'On se trouve à l'intérieur de l'Objet
If PosX > Objet.Left And PosX < (Objet.Left + Objet.Width) And _
PosY > Objet.Top And PosY < (Objet.Top + Objet.Height) Then

If lParam.wParam > 0 Then
' On est en haut de la feuille
If Objet.TopRow - MaxRoulette <= Objet.FixedRows Then
Objet.TopRow = Objet.FixedRows
Feuille.ScaleMode = 1
Exit Function
End If

If Objet.TopRow > Objet.FixedRows Then Objet.TopRow = Objet.TopRow - MaxRoulette
Else
If Objet.TopRow + MaxRoulette < Objet.Rows - 1 Then _
If Objet.TopRow < Objet.Rows - 1 Then Objet.TopRow = Objet.TopRow + MaxRoulette
End If
End If
Feuille.ScaleMode = 1

End If

'GetMsgProc = CallNextHookEx(Ihook, nCode, wParam, lParam)
End Function

Public Sub OpenHook(Parm1 As Form, Parm2 As MSHFlexGrid)
Set Objet = Parm2
Set Feuille = Parm1
Ihook = SetWindowsHookEx(WH_GETMESSAGE, AddressOf GetMsgProc, App.hInstance, App.ThreadID)
End Sub

Public Sub CloseHook()
UnhookWindowsHookEx Ihook
Set Objet = Nothing
Set Feuille = Nothing
End Sub
Commenter la réponse de Cjvg
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Ben,
Pour moi : dès lors que ton harpon est subordonné, comme tu l'as fait, au fil de ton appli, il disparait normalement lorsque le fil est terminé (de manière inopinée ou non) !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
330
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
26 octobre 2017
0
Merci
J'ai ajouté une instruction dans le projet qui provoque une erreur suite à une entrée clavier.

Je confirme ce que tu as dis, un EXE qui tombe en erreur "neutralise" parfaitement le Hook à la sortie du traitement (Contrairement à ce que je croyais).


Merci encore
Commenter la réponse de Cjvg