diff -r 19c1aaf900dc -r 7acec5059fa6 WndProcRetHook.cs --- a/WndProcRetHook.cs Tue Aug 12 20:37:57 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -//============================================================================= -// COPYRIGHT: Prosoft-Lanz -//============================================================================= -// -// $Workfile: WndProcRetHook.cs $ -// -// PROJECT : CodeProject Components -// VERSION : 1.00 -// CREATION : 19.02.2003 -// AUTHOR : JCL -// -// DETAILS : This class implement the WH_CALLWNDPROCRET Windows hook mechanism. -// From MSDN, Dino Esposito. -// -// WindowCreate, WindowDestroye and WindowActivate user events. -// -//----------------------------------------------------------------------------- -using System; -using System.Runtime.InteropServices; -using System.Diagnostics; - -namespace CodeProject.Win32API.Hook -{ - /////////////////////////////////////////////////////////////////////// - #region Enum WndMessage - - /// - /// windows message. - /// - public enum WndMessage : int - { - /// Sent to the dialog procedure immediately before the dialog is displayed. - WM_INITDIALOG = 0x0110, - /// Sent to the dialog procedure immediately before the dialog is displayed. - WM_UNKNOWINIT = 0x0127 - } - #endregion - - /////////////////////////////////////////////////////////////////////// - #region Class WndProcRetEventArgs - - /// Class used for WH_CALLWNDPROCRET hook event arguments. - public class WndProcRetEventArgs : EventArgs - { - /// wParam parameter. - public IntPtr wParam; - /// lParam parameter. - public IntPtr lParam; - /// CWPRETSTRUCT structure. - public CwPRetStruct cw; - - internal WndProcRetEventArgs(IntPtr wParam, IntPtr lParam) - { - this.wParam = wParam; - this.lParam = lParam; - cw = new CwPRetStruct(); - Marshal.PtrToStructure(lParam, cw); - } - } - - /// - /// CWPRETSTRUCT structure. - /// - [StructLayout(LayoutKind.Sequential)] - public class CwPRetStruct - { - /// Return value. - public int lResult; - /// lParam parameter. - public int lParam; - /// wParam parameter. - public int wParam; - /// Specifies the message. - public WndMessage message; - /// Handle to the window that processed the message. - public IntPtr hwnd; - } - - #endregion - - /////////////////////////////////////////////////////////////////////// - #region Class WndProcRetHook - - /// - /// Class to expose the windows WH_CALLWNDPROCRET hook mechanism. - /// - public class WndProcRetHook : WindowsHook - { - /// - /// WH_CALLWNDPROCRET hook delegate method. - /// - public delegate void WndProcEventHandler(object sender, WndProcRetEventArgs e); - - private IntPtr hWndHooked; - - /// - /// Window procedure event. - /// - public event WndProcEventHandler WndProcRet; - - /// - /// Construct a WH_CALLWNDPROCRET hook. - /// - /// - /// Handle of the window to be hooked. IntPtr.Zero to hook all window. - /// - public WndProcRetHook(IntPtr hWndHooked) : base(HookType.WH_CALLWNDPROCRET) - { - this.hWndHooked = hWndHooked; - this.HookInvoke += new HookEventHandler(WndProcRetHookInvoked); - } - /// - /// Construct a WH_CALLWNDPROCRET hook giving a hook filter delegate method. - /// - /// - /// Handle of the window to be hooked. IntPtr.Zero to hook all window. - /// - /// Hook filter event. - public WndProcRetHook(IntPtr hWndHooked, HookProc func) : base(HookType.WH_CALLWNDPROCRET, func) - { - this.hWndHooked = hWndHooked; - this.HookInvoke += new HookEventHandler(WndProcRetHookInvoked); - } - - // handles the hook event - private void WndProcRetHookInvoked(object sender, HookEventArgs e) - { - WndProcRetEventArgs wpe = new WndProcRetEventArgs(e.wParam, e.lParam); - if ((hWndHooked == IntPtr.Zero || wpe.cw.hwnd == hWndHooked) && WndProcRet != null) - WndProcRet(this, wpe); - return; - } - } - #endregion -}