WndProcRetHook.cs
changeset 18 7acec5059fa6
parent 17 19c1aaf900dc
child 19 1a85ec255882
     1.1 --- a/WndProcRetHook.cs	Tue Aug 12 20:37:57 2014 +0200
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,135 +0,0 @@
     1.4 -//=============================================================================
     1.5 -// COPYRIGHT: Prosoft-Lanz
     1.6 -//=============================================================================
     1.7 -//
     1.8 -// $Workfile: WndProcRetHook.cs $
     1.9 -//
    1.10 -// PROJECT : CodeProject Components
    1.11 -// VERSION : 1.00
    1.12 -// CREATION : 19.02.2003
    1.13 -// AUTHOR : JCL
    1.14 -//
    1.15 -// DETAILS : This class implement the WH_CALLWNDPROCRET Windows hook mechanism.
    1.16 -//           From MSDN, Dino Esposito.
    1.17 -//
    1.18 -//           WindowCreate, WindowDestroye and WindowActivate user events.
    1.19 -//
    1.20 -//-----------------------------------------------------------------------------
    1.21 -using System;
    1.22 -using System.Runtime.InteropServices;
    1.23 -using System.Diagnostics;
    1.24 -
    1.25 -namespace CodeProject.Win32API.Hook
    1.26 -{
    1.27 -	///////////////////////////////////////////////////////////////////////
    1.28 -	#region Enum WndMessage
    1.29 -
    1.30 -	/// <summary>
    1.31 -	/// windows message.
    1.32 -	/// </summary>
    1.33 -	public enum WndMessage : int
    1.34 -	{
    1.35 -		/// Sent to the dialog procedure immediately before the dialog is displayed.
    1.36 -		WM_INITDIALOG = 0x0110,
    1.37 -		/// Sent to the dialog procedure immediately before the dialog is displayed.
    1.38 -		WM_UNKNOWINIT = 0x0127
    1.39 -	}
    1.40 -	#endregion
    1.41 -
    1.42 -	///////////////////////////////////////////////////////////////////////
    1.43 -	#region Class WndProcRetEventArgs
    1.44 -
    1.45 -	/// Class used for WH_CALLWNDPROCRET hook event arguments.
    1.46 -	public class WndProcRetEventArgs : EventArgs
    1.47 -	{
    1.48 -		/// wParam parameter.
    1.49 -		public IntPtr wParam;
    1.50 -		/// lParam parameter.
    1.51 -		public IntPtr lParam;
    1.52 -		/// CWPRETSTRUCT structure.
    1.53 -		public CwPRetStruct cw;
    1.54 -
    1.55 -		internal WndProcRetEventArgs(IntPtr wParam, IntPtr lParam)
    1.56 -		{
    1.57 -			this.wParam = wParam;
    1.58 -			this.lParam = lParam;
    1.59 -			cw = new CwPRetStruct();
    1.60 -			Marshal.PtrToStructure(lParam, cw);
    1.61 -		}
    1.62 -	}
    1.63 -
    1.64 -	/// <summary>
    1.65 -	/// CWPRETSTRUCT structure.
    1.66 -	/// </summary>
    1.67 -	[StructLayout(LayoutKind.Sequential)]
    1.68 -	public class CwPRetStruct
    1.69 -	{
    1.70 -		/// Return value.
    1.71 -		public int lResult;
    1.72 -		/// lParam parameter.
    1.73 -		public int lParam;
    1.74 -		/// wParam parameter.
    1.75 -		public int wParam;
    1.76 -		/// Specifies the message.
    1.77 -		public WndMessage message;
    1.78 -		/// Handle to the window that processed the message.
    1.79 -		public IntPtr hwnd;
    1.80 -	}
    1.81 -
    1.82 -	#endregion
    1.83 -
    1.84 -	///////////////////////////////////////////////////////////////////////
    1.85 -	#region Class WndProcRetHook
    1.86 -	
    1.87 -	/// <summary>
    1.88 -	/// Class to expose the windows WH_CALLWNDPROCRET hook mechanism.
    1.89 -	/// </summary>
    1.90 -	public class WndProcRetHook : WindowsHook
    1.91 -	{
    1.92 -		/// <summary>
    1.93 -		/// WH_CALLWNDPROCRET hook delegate method.
    1.94 -		/// </summary>
    1.95 -		public delegate void WndProcEventHandler(object sender, WndProcRetEventArgs e);
    1.96 -
    1.97 -		private IntPtr hWndHooked;
    1.98 -
    1.99 -		/// <summary>
   1.100 -		/// Window procedure event.
   1.101 -		/// </summary>
   1.102 -		public event WndProcEventHandler WndProcRet;
   1.103 -
   1.104 -		/// <summary>
   1.105 -		/// Construct a WH_CALLWNDPROCRET hook.
   1.106 -		/// </summary>
   1.107 -		/// <param name="hWndHooked">
   1.108 -		/// Handle of the window to be hooked. IntPtr.Zero to hook all window.
   1.109 -		/// </param>
   1.110 -		public WndProcRetHook(IntPtr hWndHooked) : base(HookType.WH_CALLWNDPROCRET)
   1.111 -		{
   1.112 -			this.hWndHooked = hWndHooked;
   1.113 -			this.HookInvoke += new HookEventHandler(WndProcRetHookInvoked);
   1.114 -		}
   1.115 -		/// <summary>
   1.116 -		/// Construct a WH_CALLWNDPROCRET hook giving a hook filter delegate method.
   1.117 -		/// </summary>
   1.118 -		/// <param name="hWndHooked">
   1.119 -		/// Handle of the window to be hooked. IntPtr.Zero to hook all window.
   1.120 -		/// </param>
   1.121 -		/// <param name="func">Hook filter event.</param>
   1.122 -		public WndProcRetHook(IntPtr hWndHooked, HookProc func) : base(HookType.WH_CALLWNDPROCRET, func)
   1.123 -		{
   1.124 -			this.hWndHooked = hWndHooked;
   1.125 -			this.HookInvoke += new HookEventHandler(WndProcRetHookInvoked);
   1.126 -		}
   1.127 -
   1.128 -		// handles the hook event
   1.129 -		private void WndProcRetHookInvoked(object sender, HookEventArgs e)
   1.130 -		{
   1.131 -			WndProcRetEventArgs wpe = new WndProcRetEventArgs(e.wParam, e.lParam);
   1.132 -			if ((hWndHooked == IntPtr.Zero || wpe.cw.hwnd == hWndHooked) && WndProcRet != null)
   1.133 -				WndProcRet(this, wpe);
   1.134 -			return;
   1.135 -		}
   1.136 -	}
   1.137 -	#endregion
   1.138 -}