Az üzenetek figyeléséhez szükségünk lesz egy új osztályra, melyben implementáljuk az IMessageFilter interfészt. Ennek egyetlen függvénye van, a PreFilterMessage. Ez minden olyan esetben meghívásra kerül, ha alkalmazásunk üzenetet kap. Paraméterként egy Message nevű struktúrát kapunk, melyből megtudhatjuk az üzenet tartalmát. E struktúrában rendelkezésünkre áll egy Msg, LParam, WParam property, mely az üzenet tulajdonságairól tájékoztat bennünket.
Ha e függvény visszatérési értéke igaz lenne, akkor az alkalmazásunk már nem kapja meg ezt az üzenetet. Ezt felhasználva befolyásolhatjuk, hogy milyen üzenetek kerüljenek az alkalmazásunk által feldolgozásra. Továbbá azt se felejtsük el, hogy a függvény paramétere ref típusú, tehát annak értékeit megváltoztathatjuk, így egy létrejött üzenetnek akár más paramétereket is adhatunk.
Mellékelt példában csak annyit teszünk, hogy egy ListBox-ba folyamatosan megjelenítjük az üzeneteket, kiszűrve a listából az egér mozgására vonatkozókat, mivel ebből lenne a legtöbb.
Public Class MessageViewer
Implements IMessageFilter
Private listBox As ListBox
Public Sub New(ByVal l As ListBox)
listBox = l
End Sub 'New
Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
If m.Msg <> &H200 AndAlso m.Msg <> &HA0 Then
listBox.SelectedIndex = listBox.Items.Add(m.ToString())
End If
Return False
End Function 'PreFilterMessage
End Class 'MessageViewer
Az osztályunk elkészítése önmagában még nem hozna eredményt, ezt hozzá is kell adnunk az Application osztály AddMessageFilter függvényének segítségével.
Application.AddMessageFilter(New MessageViewer(listBox1))