private static IntPtr SetHook(LowLevelProcDelegate callback, int hookType) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { var handle = GetModuleHandle(curModule.ModuleName); return(SetWindowsHookEx(hookType, callback, handle, 0)); } }
public void Init() { if (m_Init) { return; } m_Init = true; new Thread(() => { m_CachedLowLevelKeyboardProcDelegate = new LowLevelProcDelegate(LowLevelKeyboardProcCallback); m_CachedLowLevelMouseProcDelegate = new LowLevelProcDelegate(LowLevelMouseProcCallback); m_KeyboardHook = SetHook(m_CachedLowLevelKeyboardProcDelegate, WH_KEYBOARD_LL); m_MouseHook = SetHook(m_CachedLowLevelMouseProcDelegate, WH_MOUSE_LL); Application.Run(); // TODO: Find a better way to implement Application Message Loop.... LOL }).Start(); }
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelProcDelegate lpfn, IntPtr hMod, uint dwThreadId);