Implementing the WH_MOUSE Hook
I also chose to include a WH_MOUSE
hook example
because
it requires the use of a user-defined type. In VB.NET, user-defined
types are gone and are replaced by structures. The example presented
here will explain how to use a structure in place of a user-defined
type.
Tip
If you are going to port any of this code to C#, you must add an attribute to the structure definition. The following is an example of this:
[StructLayout(LayoutKind.Sequential)] public struct MOUSEHOOKSTRUCT { public pt As POINTAPI public hwnd As Integer public wHitTestCode As Integer public dwExtraInfo As Integer }
Examining the IL that the VB.NET application generated, we see the following
.class value sequential ansi sealed nested public modl$POINTAPI extends [mscorlib]System.ValueType { } // end of class mod1$POINTAPI
The structure is actually created as a
class that inherits from the System.Value.Type class -- the word
extends
in the previous IL code implies
“inherits from.” VB.NET automatically marks this class as
sequential.
The Application
This application’s UI is laid out exactly as in
the previous example of the
WH_KEYBOARD
hook, which Figure 23-2 shows. The Hook button installs the
WH_MOUSE
hook, and the UnHook button removes this
hook.
The filter function values are printed to the text box on the form whenever this hook is called. To see messages written out to this text box, move the mouse or click one of its buttons.
The .VB File
Example 23-3 presents the code contained in ...
Get Subclassing and Hooking with Visual Basic now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.