/// <summary> /// Installs the mouse move hook. /// </summary> /// <returns>True, if function succeeds, otherwise false.</returns> /// <exception cref="Win32Exception"></exception> public void Hook() { proc = HookCallback; using (Process currentProcess = Process.GetCurrentProcess()) using (ProcessModule currentModule = currentProcess.MainModule) { int hookTypeId = GetWindowsHookType(); IntPtr moduleHandle = NativeMethods.GetModuleHandle(currentModule.ModuleName); hookId = NativeMethods.SetWindowsHookEx(hookTypeId, proc, moduleHandle, (uint)GetThreadId()); } if (hookId == IntPtr.Zero) { int lastError = Marshal.GetLastWin32Error(); if (lastError == 1429) { throw new Win32Exception(lastError, "This hook procedure can only be set globally."); } else { throw new NotImplementedException(); } } }
private static IntPtr SetLowLevelHook(LowLevelHookProc proc, int hookId) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { IntPtr hook = SetWindowsHookEx(hookId, proc, GetModuleHandle("user32"), 0); if (hook == IntPtr.Zero) { throw new System.ComponentModel.Win32Exception(); } return(hook); } }
/// <summary> /// Installs the mouse move hook. /// </summary> /// <returns>True, if function succeeds, otherwise false.</returns> public bool Hook() { proc = HookCallback; using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { IntPtr moduleHandle = NativeMethods.GetModuleHandle(curModule.ModuleName); hookId = NativeMethods.SetWindowsHookEx(GetWindowsHookType(), proc, moduleHandle, 0); } return(hookId != IntPtr.Zero); }
public Hook(HookType Type) { m_type = Type; m_suppressmultiple = true; lastPressed = false; lastCanceled = false; m_allowCancel = true; //cache the main module address for the current process Process p = Process.GetCurrentProcess(); hMod = GetModuleHandle(p.MainModule.ModuleName); //must store a reference to the delagate to prevent it from being GC'd pKeyboard = new LowLevelHookProc(KeyboardProc); pMouse = new LowLevelHookProc(MouseProc); }
/*-------------------------- Private Methods -------------------------*/ /// <summary> /// 设置钩子函数 /// </summary> /// <param name="proc"> /// 钩子的地址? /// </param> /// <returns> /// </returns> /// <remarks> /// https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.process.mainmodule?view=netframework-4.8 /// </remarks> protected IntPtr SetHook(LowLevelHookProc proc) { // [Process] 提供对本地和远程进程的访问权限并使你能够启动和停止本地系统进程。 using (Process curProcess = Process.GetCurrentProcess()) // 获取新的 Process 组件并将其与当前活动的进程关联。 { using (ProcessModule curModule = curProcess.MainModule) // 获取关联进程的主模块。 { var ret = User32Dll.SetWindowsHookEx( (int)IdHook, proc, User32Dll.GetModuleHandle(curModule.ModuleName), 0 ); return(ret); } } }
public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelHookProc lpfn, IntPtr hmod, uint dwThreadId);
/*--------------------------- Constructors ---------------------------*/ /// <summary> /// 初始化键盘/鼠标监听钩子的基类 /// </summary> /// <param name="idHook"> /// Mouse or keyboard <see cref="IdHooks"/> /// </param> protected BaseGlobalListener(IdHooks idHook) { IdHook = idHook; _HookProc = HookCallBack; }
public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelHookProc lpfn, IntPtr hMod, uint dwThreadId);
/*--------------------------- Constructor ---------------------------*/ /// <summary> /// <see cref="BaseGlobalListener"/>构造器 /// </summary> public BaseGlobalListener(IdHooks idHook) { IdHook = idHook; _HookProc = HookCallBack; }