Ejemplo n.º 1
0
 private void HookAction(Action <CWPRETSTRUCT> action)
 {
     this.hookAction = action;
     this.hookProc   = new UnsafeNativeMethods.HookProc(MessageHook);
     this.hook       = UnsafeNativeMethods.SetWindowsHookEx(
         HookType.WH_CALLWNDPROCRET,
         this.hookProc,
         IntPtr.Zero,
         UnsafeNativeMethods.GetCurrentThreadId());
 }
Ejemplo n.º 2
0
 private static IntPtr SetHook(UnsafeNativeMethods.HookProc proc)
 {
     using (var curProcess = Process.GetCurrentProcess())
         using (var curModule = curProcess.MainModule)
         {
             if (curModule != null)
             {
                 return(UnsafeNativeMethods.SetWindowsHookEx((int)UnsafeNativeMethods.HookType.WH_KEYBOARD_LL, proc,
                                                             UnsafeNativeMethods.GetModuleHandle(curModule.ModuleName), 0));
             }
             return(IntPtr.Zero);
         }
 }
Ejemplo n.º 3
0
        public void StartMonitoring(bool installMouseHook, bool installKeyboardHook)
        {
            if (mouseHook_ == IntPtr.Zero && installMouseHook)
            {
                mouseHookProcedure_ = new UnsafeNativeMethods.HookProc(MouseHookProc_);
                mouseHook_          = UnsafeNativeMethods.SetWindowsHookEx(
                    SafeNativeMethods.WH_MOUSE_LL,
                    mouseHookProcedure_,
                    Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),
                    0);

                if (mouseHook_ == IntPtr.Zero)
                {
                    int errorCode = Marshal.GetLastWin32Error();
                    StopMonitoring(true, false, false);
                    throw new Win32Exception(errorCode);
                }
            }

            if (keyboardHook_ == IntPtr.Zero && installKeyboardHook)
            {
                keyboardHookProcedure_ = new UnsafeNativeMethods.HookProc(KeyboardHookProc_);
                keyboardHook_          = UnsafeNativeMethods.SetWindowsHookEx(
                    SafeNativeMethods.WH_KEYBOARD_LL,
                    keyboardHookProcedure_,
                    Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),
                    0);

                if (keyboardHook_ == IntPtr.Zero)
                {
                    int errorCode = Marshal.GetLastWin32Error();
                    StopMonitoring(false, true, false);
                    throw new Win32Exception(errorCode);
                }
            }
        }