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 -}