diff -r 19c1aaf900dc -r 7acec5059fa6 WindowsHook.cs --- a/WindowsHook.cs Tue Aug 12 20:37:57 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,186 +0,0 @@ -//============================================================================= -// COPYRIGHT: Prosoft-Lanz -//============================================================================= -// -// $Workfile: WindowsHook.cs $ -// -// PROJECT : CodeProject Components -// VERSION : 1.00 -// CREATION : 19.02.2003 -// AUTHOR : JCL -// -// DETAILS : This class implement the Windows hook mechanism. -// From MSDN, Dino Esposito. -// -//----------------------------------------------------------------------------- -using System; -using System.Runtime.InteropServices; - -namespace CodeProject.Win32API.Hook -{ - /////////////////////////////////////////////////////////////////////// - #region Class HookEventArgs - - /// Class used for hook event arguments. - public class HookEventArgs : EventArgs - { - /// Event code parameter. - public int code; - /// wParam parameter. - public IntPtr wParam; - /// lParam parameter. - public IntPtr lParam; - - internal HookEventArgs(int code, IntPtr wParam, IntPtr lParam) - { - this.code = code; - this.wParam = wParam; - this.lParam = lParam; - } - } - - #endregion - - /////////////////////////////////////////////////////////////////////// - #region Enum HookType - - /// Hook Types. - public enum HookType : int - { - /// 0 - WH_JOURNALRECORD = 0, - /// 1 - WH_JOURNALPLAYBACK = 1, - /// 2 - WH_KEYBOARD = 2, - /// 3 - WH_GETMESSAGE = 3, - /// 4 - WH_CALLWNDPROC = 4, - /// 5 - WH_CBT = 5, - /// 6 - WH_SYSMSGFILTER = 6, - /// 7 - WH_MOUSE = 7, - /// 8 - WH_HARDWARE = 8, - /// 9 - WH_DEBUG = 9, - /// 10 - WH_SHELL = 10, - /// 11 - WH_FOREGROUNDIDLE = 11, - /// 12 - WH_CALLWNDPROCRET = 12, - /// 13 - WH_KEYBOARD_LL = 13, - /// 14 - WH_MOUSE_LL = 14 - } - #endregion - - /////////////////////////////////////////////////////////////////////// - #region Class WindowsHook - - /// - /// Class to expose the windows hook mechanism. - /// - public class WindowsHook - { - /// - /// Hook delegate method. - /// - public delegate int HookProc(int code, IntPtr wParam, IntPtr lParam); - - // internal properties - internal IntPtr hHook = IntPtr.Zero; - internal HookProc filterFunc = null; - internal HookType hookType; - - /// - /// Hook delegate method. - /// - public delegate void HookEventHandler(object sender, HookEventArgs e); - - /// - /// Hook invoke event. - /// - public event HookEventHandler HookInvoke; - - internal void OnHookInvoke(HookEventArgs e) - { - if (HookInvoke != null) - HookInvoke(this, e); - } - - /// - /// Construct a HookType hook. - /// - /// Hook type. - public WindowsHook(HookType hook) - { - hookType = hook; - filterFunc = new HookProc(this.CoreHookProc); - } - /// - /// Construct a HookType hook giving a hook filter delegate method. - /// - /// Hook type - /// Hook filter event. - public WindowsHook(HookType hook, HookProc func) - { - hookType = hook; - filterFunc = func; - } - - // default hook filter function - internal int CoreHookProc(int code, IntPtr wParam, IntPtr lParam) - { - if (code < 0) - return CallNextHookEx(hHook, code, wParam, lParam); - - // let clients determine what to do - HookEventArgs e = new HookEventArgs(code, wParam, lParam); - OnHookInvoke(e); - - // yield to the next hook in the chain - return CallNextHookEx(hHook, code, wParam, lParam); - } - - /// - /// Install the hook. - /// - public void Install() - { - hHook = SetWindowsHookEx(hookType, filterFunc, IntPtr.Zero, (int)AppDomain.GetCurrentThreadId()); - } - - - /// - /// Uninstall the hook. - /// - public void Uninstall() - { - if (hHook != IntPtr.Zero) - { - UnhookWindowsHookEx(hHook); - hHook = IntPtr.Zero; - } - } - - #region Win32 Imports - - [DllImport("user32.dll")] - internal static extern IntPtr SetWindowsHookEx(HookType code, HookProc func, IntPtr hInstance, int threadID); - - [DllImport("user32.dll")] - internal static extern int UnhookWindowsHookEx(IntPtr hhook); - - [DllImport("user32.dll")] - internal static extern int CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam); - - #endregion - } - #endregion -}