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$POINTAPIThe 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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access