Still trying to setup WCF for us to work nicely.
Now using multi threading and reliable session.
Implementing thread safe functions where needed.
Enforcing session mode.
Fixing bug in marquee label as we forgot to reset current position when text is changed.
1 //=============================================================================
2 // COPYRIGHT: Prosoft-Lanz
3 //=============================================================================
5 // $Workfile: WindowsHook.cs $
7 // PROJECT : CodeProject Components
9 // CREATION : 19.02.2003
12 // DETAILS : This class implement the Windows hook mechanism.
13 // From MSDN, Dino Esposito.
15 //-----------------------------------------------------------------------------
17 using System.Runtime.InteropServices;
19 namespace CodeProject.Win32API.Hook
21 ///////////////////////////////////////////////////////////////////////
22 #region Class HookEventArgs
24 /// Class used for hook event arguments.
25 public class HookEventArgs : EventArgs
27 /// Event code parameter.
34 internal HookEventArgs(int code, IntPtr wParam, IntPtr lParam)
44 ///////////////////////////////////////////////////////////////////////
48 public enum HookType : int
53 WH_JOURNALPLAYBACK = 1,
73 WH_FOREGROUNDIDLE = 11,
75 WH_CALLWNDPROCRET = 12,
83 ///////////////////////////////////////////////////////////////////////
84 #region Class WindowsHook
87 /// Class to expose the windows hook mechanism.
89 public class WindowsHook
92 /// Hook delegate method.
94 public delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);
96 // internal properties
97 internal IntPtr hHook = IntPtr.Zero;
98 internal HookProc filterFunc = null;
99 internal HookType hookType;
102 /// Hook delegate method.
104 public delegate void HookEventHandler(object sender, HookEventArgs e);
107 /// Hook invoke event.
109 public event HookEventHandler HookInvoke;
111 internal void OnHookInvoke(HookEventArgs e)
113 if (HookInvoke != null)
118 /// Construct a HookType hook.
120 /// <param name="hook">Hook type.</param>
121 public WindowsHook(HookType hook)
124 filterFunc = new HookProc(this.CoreHookProc);
127 /// Construct a HookType hook giving a hook filter delegate method.
129 /// <param name="hook">Hook type</param>
130 /// <param name="func">Hook filter event.</param>
131 public WindowsHook(HookType hook, HookProc func)
137 // default hook filter function
138 internal int CoreHookProc(int code, IntPtr wParam, IntPtr lParam)
141 return CallNextHookEx(hHook, code, wParam, lParam);
143 // let clients determine what to do
144 HookEventArgs e = new HookEventArgs(code, wParam, lParam);
147 // yield to the next hook in the chain
148 return CallNextHookEx(hHook, code, wParam, lParam);
152 /// Install the hook.
154 public void Install()
156 hHook = SetWindowsHookEx(hookType, filterFunc, IntPtr.Zero, (int)AppDomain.GetCurrentThreadId());
161 /// Uninstall the hook.
163 public void Uninstall()
165 if (hHook != IntPtr.Zero)
167 UnhookWindowsHookEx(hHook);
172 #region Win32 Imports
174 [DllImport("user32.dll")]
175 internal static extern IntPtr SetWindowsHookEx(HookType code, HookProc func, IntPtr hInstance, int threadID);
177 [DllImport("user32.dll")]
178 internal static extern int UnhookWindowsHookEx(IntPtr hhook);
180 [DllImport("user32.dll")]
181 internal static extern int CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam);