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
Class
L'exemple complet est disponible ici : UseApplicationPrefilter.zip