/// <summary> /// Set up the hook into Windows /// </summary> protected void Hook() { if (m_hook == IntPtr.Zero) { // We have to store the HookProc, so that it is not garbage collected during runtime m_hookedProc = HookProc; // need instance handle to module to create a system-wide hook IntPtr instance = WinAPI.LoadLibrary("User32"); m_hook = SetWindowsHookEx(WinAPI.HookType.WH_KEYBOARD_LL, m_hookedProc, instance, 0); m_hookedAsync = new KeyboardHookAsync(KeyCallback); } }
/// <summary> /// Unhook from windows /// </summary> public void UnHook() { if (m_hook != IntPtr.Zero) { WinAPI.UnhookWindowsHookEx(m_hook); m_hook = IntPtr.Zero; // clear the forced references for GC m_hookedAsync = null; m_hookedProc = null; } }