Hook et Abend Programme

Résolu
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 5 août 2012 à 19:30
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

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 août 2012 à 11:10
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 août 2012 à 22:02
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
0
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 à 10:56
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 août 2012 à 11:05
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
0

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

Posez votre question
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
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
0
Rejoignez-nous