V. Alternative au Hook Local▲
V-A. Présentation▲
Une alternative intéressante à la mise en place d'un Hook Local est l'utilisation de la méthode :
Application.AddMessageFilter(value As IMessageFilter)
Il s'agit ici de poser un filtre sur les messages destinés à l'application.
Chacun de ces messages est d'abord transmis à la méthode PreFilterMessage
de l'objet implémentant IMessageFilter.
V-B. Exemple▲
L'exemple suivant permet lors de la saisie d'un caractère compris entre A et Z de lever un événement avec comme paramètre le caractère en majuscule :
Option Explicit On
Option Strict On
Public Class FormDemarrage
Private pf As New ExemplePreFilter
Public Sub New()
InitializeComponent()
Application.AddMessageFilter(pf)
AddHandler pf.KeyDown, AddressOf pfKeyDown
End Sub
Private Sub pfKeyDown(ByVal s As String)
Me.TextBox1.Text = Me.TextBox1.Text & s
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim f As New FormDeSaisie
f.Show()
End Sub
End Class
Public NotInheritable Class ExemplePreFilter
Implements Windows.Forms.IMessageFilter
'
Public Event KeyDown(ByVal s As String)
Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) _
As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
If m.Msg = &H100 Then ' WM_KEYDOWN
If m.WParam.ToInt32 > 64 And m.WParam.ToInt32 < 91 Then
RaiseEvent KeyDown(UCase(Chr(m.WParam.ToInt32)))
End If
End If
Return False
End Function
End ClassL'exemple complet est disponible ici : UseApplicationPrefilter.zip


