Caveats
This hook’s most outstanding feature is that you can use it only as a system-wide hook. This means that the filter function must reside in a Win32 DLL. This DLL is injected into every running process. Therefore, this hook carries with it a bigger performance penalty than thread-specific hooks.
You should remember that this hook intercepts sent messages only. During the modal loop, no messages can be posted to the thread’s message queue.
Watch your return values because a returned zero will prevent any
other WH_MSGFILTER
hook from operating. Because
this hook is installed only as a system-wide hook, if a zero is
returned, it means that no WH_MSGFILTER
hooks will
be called from within any thread. This could cause other applications
that rely on these hooks to fail.
Some additional MSGF_
messages are defined in
Winuser.h, but this hook currently is not
implementing them. These messages are:
Public Const MSGF_MAINLOOP = 8 'Not used with SysMsgFilter Hook Public Const MSGF_MAX = 8 'Not used with SysMsgFilter Hook Public Const MSGF_MESSAGEBOX = 1 'Not used with SysMsgFilter Hook Public Const MSGF_MOVE = 3 'Not used with SysMsgFilter Hook Public Const MSGF_SIZE = 4 'Not used with SysMsgFilter Hook Public Const MSGF_USER = 4096 'Not used with SysMsgFilter Hook Public Const MSGF_NEXTWINDOW = 6 'Not used with SysMsgFilter Hook
Even though this hook intercepts a subset of the messages that hooks
such as WH_CALLWNDPROC
or
WH_CALLWNDPROCRET
intercept, you should still watch how this hook ...
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.