callnexthookex (user32)
Last changed: -65.216.74.168

.
Summary

C# Signature:

/// <summary>
///     Passes the hook information to the next hook procedure in the current hook chain. A hook procedure can call this
///     function either before or after processing the hook information.
///     <para>
///     See [ https://msdn.microsoft.com/en-us/library/windows/desktop/ms644974%28v=vs.85%29.aspx ] for more
///     information.
///     </para>
/// </summary>
/// <param name="hhk">C++ ( hhk [in, optional]. Type: HHOOK )<br />This parameter is ignored. </param>
/// <param name="nCode">
///     C++ ( nCode [in]. Type: int )<br />The hook code passed to the current hook procedure. The next
///     hook procedure uses this code to determine how to process the hook information.
/// </param>
/// <param name="wParam">
///     C++ ( wParam [in]. Type: WPARAM )<br />The wParam value passed to the current hook procedure. The
///     meaning of this parameter depends on the type of hook associated with the current hook chain.
/// </param>
/// <param name="lParam">
///     C++ ( lParam [in]. Type: LPARAM )<br />The lParam value passed to the current hook procedure. The
///     meaning of this parameter depends on the type of hook associated with the current hook chain.
/// </param>
/// <returns>
///     C++ ( Type: LRESULT )<br />This value is returned by the next hook procedure in the chain. The current hook
///     procedure must also return this value. The meaning of the return value depends on the hook type. For more
///     information, see the descriptions of the individual hook procedures.
/// </returns>
/// <remarks>
///     <para>
///     Hook procedures are installed in chains for particular hook types. <see cref="CallNextHookEx" /> calls the
///     next hook in the chain.
///     </para>
///     <para>
///     Calling CallNextHookEx is optional, but it is highly recommended; otherwise, other applications that have
///     installed hooks will not receive hook notifications and may behave incorrectly as a result. You should call
///     <see cref="CallNextHookEx" /> unless you absolutely need to prevent the notification from being seen by other
///     applications.
///     </para>
/// </remarks>
[DllImport("user32.dll")]
static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam,
   IntPtr lParam);

// overload for use with LowLevelKeyboardProc
[DllImport("user32.dll")]
static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, WM wParam, [In]KBDLLHOOKSTRUCT lParam);

// overload for use with LowLevelMouseProc
[DllImport("user32.dll")]
static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, WM wParam, [In]MSLLHOOKSTRUCT lParam);

VB.NET Signature:

<DllImport("user32.dll")> _
Private Shared Function CallNextHookEx(ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function

' overload for use with LowLevelKeyboardProc
<DllImport("user32.dll")> _
Private Shared Function CallNextHookEx(ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As WindowsMessages, <[In]()> ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
End Function

' overload for use with LowLevelMouseProc
<DllImport("user32.dll")> _
Private Shared Function CallNextHookEx(ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As WindowsMessages, <[In]()> ByRef lParam As MSLLHOOKSTRUCT) As IntPtr
End Function

VB Signature

Public Declare Function CallNextHookEx Lib "user32" _
          (ByVal hHook As Long, _
           ByVal ncode As Long, _
           ByVal wParam As WindowsMessages, _
           lParam As Any) As Long

' overload for use with LowLevelKeyboardProc
Public Declare Function CallNextHookExKbd Lib "user32" Alias "CallNextHookEx" _
          (ByVal hHook As Long, _
           ByVal ncode As Long, _
           ByVal wParam As WindowsMessages, _
           lParam As KBDLLHOOKSTRUCT) As Long

' overload for use with LowLevelMouseProc
Public Declare Function CallNextHookExMse Lib "user32" Alias "CallNextHookEx" _
          (ByVal hHook As Long, _
           ByVal ncode As Long, _
           ByVal wParam As WindowsMessages, _
           lParam As MSLLHOOKSTRUCT) As Long

User-Defined Types:

WindowsMessages,KBDLLHOOKSTRUCT,MSLLHOOKSTRUCT

Notes:

hhk is ignored, so you can use IntPtr.Zero

Tips & Tricks:

Please add some!

Sample Code:

Please add some!

Alternative Managed API:

The ManagedWindowsApi project (http://mwinapi.sourceforge.net) provides a Hook class and subclasses for Journal hooks, Message hooks and Low-Level hooks.

See
Documentation