private void HookMouse()
            {
                GC.KeepAlive(this);

                // Locking 'this' here is ok since this is an internal class.
                lock (this)
                {
                    if (_mouseHookHandle != IntPtr.Zero)
                    {
                        return;
                    }

                    if (_thisProcessId == 0)
                    {
                        User32.GetWindowThreadProcessId(_control, out _thisProcessId);
                    }

                    var hook = new User32.HOOKPROC(new MouseHookObject(this).Callback);
                    _mouseHookRoot   = GCHandle.Alloc(hook);
                    _mouseHookHandle = User32.SetWindowsHookExW(
                        User32.WH.MOUSE,
                        hook,
                        IntPtr.Zero,
                        Kernel32.GetCurrentThreadId());
                    Debug.Assert(_mouseHookHandle != IntPtr.Zero, "Failed to install mouse hook");
                    Debug.WriteLineIf(CompModSwitches.DebugGridView.TraceVerbose, "DropDownHolder:HookMouse()");
                }
            }
Пример #2
0
                private void HookMouse()
                {
                    Debug.Assert(s_adornerWindowList.Count > 0, "No AdornerWindow available to create the mouse hook");
                    lock (this)
                    {
                        if (_mouseHookHandle != IntPtr.Zero || s_adornerWindowList.Count == 0)
                        {
                            return;
                        }

                        if (_thisProcessID == 0)
                        {
                            AdornerWindow adornerWindow = s_adornerWindowList[0];
                            User32.GetWindowThreadProcessId(adornerWindow, out _thisProcessID);
                        }

                        var hook = new User32.HOOKPROC(MouseHookProc);
                        _mouseHookRoot   = GCHandle.Alloc(hook);
                        _mouseHookHandle = User32.SetWindowsHookExW(
                            User32.WH.MOUSE,
                            hook,
                            IntPtr.Zero,
                            Kernel32.GetCurrentThreadId());

                        if (_mouseHookHandle != IntPtr.Zero)
                        {
                            _isHooked = true;
                        }

                        Debug.Assert(_mouseHookHandle != IntPtr.Zero, "Failed to install mouse hook");
                    }
                }
Пример #3
0
        public void Start()
        {
            // Install Mouse Hook
            MouseHookProcedure = new User32.HOOKPROC(MouseHookProc);
            hMouseHook = User32.SetWindowsHookEx(
                User32.WH_MOUSE_LL,
                MouseHookProcedure,
                Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),
                0);

            if (IntPtr.Zero == hMouseHook)
            {
                //Common.Log("Error installing mouse hook: " + Marshal.GetLastWin32Error().ToString());
                Stop();
            }
        }
Пример #4
0
 /// <summary>
 ///  install the hook.  quite easy
 /// </summary>
 private static void InstallHook()
 {
     if (s_hhook == IntPtr.Zero)
     {
         s_hook     = new User32.HOOKPROC(new SendKeysHookProc().Callback);
         s_stopHook = false;
         s_hhook    = User32.SetWindowsHookExW(
             User32.WH.JOURNALPLAYBACK,
             s_hook,
             Kernel32.GetModuleHandleW(null),
             0);
         if (s_hhook == IntPtr.Zero)
         {
             throw new SecurityException(SR.SendKeysHookFailed);
         }
     }
 }
Пример #5
0
        //
        // Private methods
        //

        #region private void AttachKeyboardHook()
        private void AttachKeyboardHook()
        {
            keyboardHook = new User32.HOOKPROC(KeyboardHookHandler);
            GC.KeepAlive(keyboardHook);

            hKeyboardHook = User32.SetWindowsHookEx(
                WindowsHookCode.WH_KEYBOARD_LL,
                keyboardHook,
                (int)Marshal.GetHINSTANCE(
                    Assembly.GetExecutingAssembly().GetModules()[0]),
                0);

            if (hKeyboardHook == 0)
            {
                int errorCode = Marshal.GetLastWin32Error();
                DetachKeyboardHook(true);
                throw new Win32Exception(errorCode);
            }
        }
Пример #6
0
        private static void TestHook()
        {
            hookSupported = false;
            try
            {
                var    hookProc   = new User32.HOOKPROC(EmptyHookCallback);
                IntPtr hookHandle = User32.SetWindowsHookExW(
                    User32.WH.JOURNALPLAYBACK,
                    hookProc,
                    Kernel32.GetModuleHandleW(null),
                    0);
                hookSupported = (hookHandle != IntPtr.Zero);

                if (hookHandle != IntPtr.Zero)
                {
                    User32.UnhookWindowsHookEx(hookHandle);
                }
            }
            catch
            {
                // Ignore any exceptions to keep existing SendKeys behavior
            }
        }
 public HookDemo()
 {
     _mouseHook = OnMouseHook;
 }
Пример #8
0
        private void AttachKeyboardHook()
        {
            keyboardHook = new User32.HOOKPROC(KeyboardHookHandler);
            GC.KeepAlive(keyboardHook);

            hKeyboardHook = User32.SetWindowsHookEx(
                WindowsHookCode.WH_KEYBOARD_LL,
                keyboardHook,
                (int)Marshal.GetHINSTANCE(
                Assembly.GetExecutingAssembly().GetModules()[0]),
                0);

            if (hKeyboardHook == 0)
            {
                int errorCode = Marshal.GetLastWin32Error();
                DetachKeyboardHook(true);
                throw new Win32Exception(errorCode);
            }
        }
Пример #9
0
 public MouseHook(User32.HOOKPROC h)
 {
     this.HookProc = h;
 }
Пример #10
0
 public KeyboardHookService(IMessageService messageService)
 {
     this.messageService = messageService;
     hookProc            = HookCallback;
 }
Пример #11
0
 public KeyboardHook(User32.HOOKPROC h)
 {
     this.HookProc = h;
 }
Пример #12
0
 public MouseHookService(IMessageService messageService)
 {
     this.messageService = messageService;
     hookProc            = HookCallback;
 }