Пример #1
0
        /// <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();
                }
            }
        }
Пример #2
0
 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);
         }
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
    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);
    }
Пример #5
0
 /*--------------------------  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);
         }
     }
 }
Пример #6
0
 public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelHookProc lpfn, IntPtr hmod, uint dwThreadId);
Пример #7
0
 /*---------------------------  Constructors ---------------------------*/
 /// <summary>
 ///     初始化键盘/鼠标监听钩子的基类
 /// </summary>
 ///     <param name="idHook">
 ///     Mouse or keyboard <see cref="IdHooks"/>
 ///     </param>
 protected BaseGlobalListener(IdHooks idHook)
 {
     IdHook    = idHook;
     _HookProc = HookCallBack;
 }
Пример #8
0
 public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelHookProc lpfn, IntPtr hMod, uint dwThreadId);
Пример #9
0
 /*---------------------------  Constructor  ---------------------------*/
 /// <summary>
 ///     <see cref="BaseGlobalListener"/>构造器
 /// </summary>
 public BaseGlobalListener(IdHooks idHook)
 {
     IdHook    = idHook;
     _HookProc = HookCallBack;
 }
Пример #10
0
   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);
   }