private IntPtr DropDownHook(int code, IntPtr wparam, IntPtr lparam) { if (code == NativeMethods.MSGF_MENU) { NativeMethods.MSG msg = (NativeMethods.MSG)Marshal.PtrToStructure(lparam, typeof(NativeMethods.MSG)); Message message = Message.Create(msg.hwnd, msg.message, msg.wParam, msg.lParam); if (this.DropDownFilter(ref message)) { return((IntPtr)1); } } return(NativeMethods.CallNextHookEx(this.hookHandle, code, wparam, lparam)); }
// Default filter function private IntPtr CoreHookProc(int code, IntPtr wParam, IntPtr lParam) { if (code < 0) { return(NativeMethods.CallNextHookEx(_mHHook, code, wParam, lParam)); } // Let clients determine what to do var e = new HookEventArgs { HookCode = code, WParam = wParam, LParam = lParam }; OnHookInvoked(e); // Yield to the next hook in the chain return(NativeMethods.CallNextHookEx(_mHHook, code, wParam, lParam)); }