Example #1
0
        public WindowHook()
        {
            filterMsgs    = new List <int>();
            mHookCB       = null;
            msgCallback   = null;
            hookWndHandle = IntPtr.Zero;

            if (null == win32Callback)
            {
                win32Callback = new Win32.HookProc((nCode, wparam, lparam) =>
                {
                    if (nCode >= 0)
                    {
                        Win32.MSG msg = (Win32.MSG)Marshal.PtrToStructure(lparam, typeof(Win32.MSG));
                        System.Diagnostics.Debug.WriteLine("hook message: " + Convert.ToString(msg.message, 16));
                        foreach (var m in filterMsgs)
                        {
                            if (m == msg.message && msgCallback != null)
                            {
                                msgCallback(msg.wParam);
                                break;
                            }
                        }
                    }
                    return(Win32.CallNextHookEx(null, nCode, wparam, lparam));
                });
            }
        }
Example #2
0
        Win32.MyWndProc subWndProc; // Delegate of type MyWndProc - needed to subclass the window

        #endregion Fields

        #region Constructors

        public FlatMenuForm()
        {
            hookProc = new Win32.HookProc(Hooked);
            subWndProc = new Win32.MyWndProc(SubclassWndProc);
            hookHandle = Win32.SetWindowsHookEx(4, hookProc, IntPtr.Zero,
                Win32.GetWindowThreadProcessId(Handle,0));
        }
Example #3
0
        public void WindowsHook(Win32.HookType type, Win32.HookProc hook)
        {
            var hMod = Win32.GetModuleHandle(
                Process.GetCurrentProcess().MainModule.ModuleName);

            Win32.SetWindowsHookEx(type, hook, hMod, 0);
        }
Example #4
0
        DateTime _lastRefresh; // not monotonic, but hopefully not a problem.

        public KeyHookManager()
        {
            _keyboardState         = new HashSet <Keys>();
            _keyboardHookProcedure = KeyboardHookProc;
            _keyboardHookProcPin   = GCHandle.Alloc(_keyboardHookProcedure);
            Start();
        }
Example #5
0
        public void Initialize()
        {
            Win32.SetWinEventHook(Win32.EVENT_CONSTANTS.EVENT_OBJECT_DESTROY, Win32.EVENT_CONSTANTS.EVENT_OBJECT_SHOW, IntPtr.Zero, _hookDelegate, 0, 0, 0);
            Win32.SetWinEventHook(Win32.EVENT_CONSTANTS.EVENT_OBJECT_CLOAKED, Win32.EVENT_CONSTANTS.EVENT_OBJECT_UNCLOAKED, IntPtr.Zero, _hookDelegate, 0, 0, 0);
            Win32.SetWinEventHook(Win32.EVENT_CONSTANTS.EVENT_SYSTEM_MINIMIZESTART, Win32.EVENT_CONSTANTS.EVENT_SYSTEM_MINIMIZEEND, IntPtr.Zero, _hookDelegate, 0, 0, 0);
            Win32.SetWinEventHook(Win32.EVENT_CONSTANTS.EVENT_SYSTEM_MOVESIZESTART, Win32.EVENT_CONSTANTS.EVENT_SYSTEM_MOVESIZEEND, IntPtr.Zero, _hookDelegate, 0, 0, 0);
            Win32.SetWinEventHook(Win32.EVENT_CONSTANTS.EVENT_SYSTEM_FOREGROUND, Win32.EVENT_CONSTANTS.EVENT_SYSTEM_FOREGROUND, IntPtr.Zero, _hookDelegate, 0, 0, 0);
            Win32.SetWinEventHook(Win32.EVENT_CONSTANTS.EVENT_OBJECT_NAMECHANGE, Win32.EVENT_CONSTANTS.EVENT_OBJECT_NAMECHANGE, IntPtr.Zero, _hookDelegate, 0, 0, 0);
            Win32.SetWinEventHook(Win32.EVENT_CONSTANTS.EVENT_OBJECT_LOCATIONCHANGE, Win32.EVENT_CONSTANTS.EVENT_OBJECT_LOCATIONCHANGE, IntPtr.Zero, _hookDelegate, 0, 0, 0);

            _mouseHook = MouseHook;

            Win32.EnumWindows((handle, param) =>
            {
                if (Win32Helper.IsAppWindow(handle))
                {
                    RegisterWindow(handle, false);
                }
                return(true);
            }, IntPtr.Zero);

            var thread = new Thread(() =>
            {
                Win32.SetWindowsHookEx(Win32.WH_MOUSE_LL, _mouseHook, Process.GetCurrentProcess().MainModule.BaseAddress, 0);
                Application.Run();
            });

            thread.Name = "WindowsManager";
            thread.Start();
        }
Example #6
0
        DateTime _lastRefresh; // not monotonic, but hopefully not a problem.

        #endregion Fields

        #region Constructors

        public KeyHookManager()
        {
            _keyboardState = new HashSet<Keys>();
            _keyboardHookProcedure = KeyboardHookProc;
            _keyboardHookProcPin = GCHandle.Alloc(_keyboardHookProcedure);
            Start();
        }
Example #7
0
        IntPtr hookHandle = IntPtr.Zero;                // Pointer to hookProc

        public FlatMenuForm()
        {
            hookProc   = new Win32.HookProc(Hooked);
            subWndProc = new Win32.MyWndProc(SubclassWndProc);
            hookHandle = Win32.SetWindowsHookEx(4, hookProc, IntPtr.Zero,
                                                Win32.GetWindowThreadProcessId(Handle, 0));
        }
Example #8
0
        public bool HookWindow(IntPtr handle, int [] msgs, MsgCallBack callback)
        {
            hookWndHandle = handle;
            msgCallback   = callback;
            foreach (var i in msgs)
            {
                filterMsgs.Add(i);
            }

            try
            {
                // int trdId =  Win32.GetWindowThreadProcessId(this.hookWndHandle,out procId);
                int trdId = Win32.GetCurrentThreadId();
                mHookCB = Win32.SetWindowsHookEx(4, win32Callback, IntPtr.Zero, trdId);
                if (mHookCB == null)
                {
                    int    err    = Win32.GetLastError();
                    string errstr = string.Format("hook message failed:{0}!", err);
                    Log.Logger.Instance.WriteLog(errstr);
                }
            }
            catch { }

            return(true);
        }
Example #9
0
 protected override void EnableHookInternal()
 {
     _callback = HookCallback;
     if (_mousehookId == IntPtr.Zero)
     {
         _mousehookId = Win32.SetWindowsHookEx(Win32.HookType.WH_MOUSE_LL, _callback, Win32.GetModule(), 0);
     }
 }
Example #10
0
        // Win32 Hooking
        // ===================================================================================

        public static void HookRegister()
        {
            if (c_hook == 0)
            {
                MouseHookProcedure = new Win32.HookProc(HookCallBack);
                c_hook             = Win32.SetWindowsHookEx(Win32.WH_MOUSE_LL, MouseHookProcedure, IntPtr.Zero, 0);
            }
        }
Example #11
0
 protected override void EnableHookInternal()
 {
     _callback = HookCallback;
     if (_keyboardHookId == IntPtr.Zero)
     {
         _keyboardHookId =
             Win32.SetWindowsHookEx(Win32.HookType.WH_KEYBOARD_LL, _callback, Win32.GetModule(), 0);
     }
 }
Example #12
0
 protected override void DisableHookInternal()
 {
     if (_keyboardHookId != IntPtr.Zero)
     {
         Win32.UnhookWindowsHookEx(_keyboardHookId);
         _keyboardHookId = IntPtr.Zero;
         _callback       = null;
     }
 }
Example #13
0
 //-------------------------------------
 // 생성자
 //-------------------------------------
 public GlobalHook()
 {
     this.HookCallBack = new Win32.HookProc(this.CallBack);
     System.Windows.Forms.Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
     MessageThread = new Thread(MessageThreadStart)
     {
         Name = "GlobalHook", IsBackground = true
     };
     MessageThread.Start();
 }
Example #14
0
 public GlobalHook(bool isAll)
 {
     this.isAll    = isAll;
     HookCallBack  = new Win32.HookProc(CallBack);
     MessageThread = new Thread(MessageThreadStart)
     {
         Name = "GlobalHook", IsBackground = true
     };
     MessageThread.Start();
 }
Example #15
0
        public void SetHook()
        {
            KeyboardHookDelegate = new Win32.HookProc(KeyboardHookProc);

            Process cProcess = Process.GetCurrentProcess();

            ProcessModule cModule = cProcess.MainModule;

            var mh = Win32.GetModuleHandle(cModule.ModuleName);

            hHook = Win32.SetWindowsHookEx(Win32.WH_KEYBOARD_LL, KeyboardHookDelegate, mh, 0);
        }
Example #16
0
 private static Win32.HookProc m_keyboard_hook_proc; // To prevent the GC collecting the delegate
 private static void EnsureSubscribedToGlobalKeyboardEvents()
 {
     if (m_keyboard_hook_handle != 0)
     {
         return;
     }
     m_keyboard_hook_proc   = KeyboardHookProc;
     m_keyboard_hook_handle = Win32.SetWindowsHookEx((int)Win32.WH_KEYBOARD_LL, m_keyboard_hook_proc, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
     if (m_keyboard_hook_handle == 0)
     {
         throw new Win32Exception(Marshal.GetLastWin32Error());
     }
 }
Example #17
0
 public IntPtr SetHook()
 {
     if (hHook == IntPtr.Zero)
     {
         Win32.HookProc keyCallBack = new Win32.HookProc(KeyHookProcedure);
         hHook = Win32.SetWindowsHookEx(
             WH_KEYBOARD_LL, keyCallBack,
             Win32.GetModuleHandle(System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName),
             0);
         gc = GCHandle.Alloc(keyCallBack);
     }
     return(hHook);
 }
Example #18
0
        ImageGrabImageDialog(NEVariables variables)
        {
            Variables = variables;
            hookProc  = MouseHook;

            InitializeComponent();

            Loaded += (s, e) =>
            {
                using (var process = Process.GetCurrentProcess())
                    using (var module = process.MainModule)
                        hook = Win32.SetWindowsHookEx(Win32.HookType.WH_MOUSE_LL, hookProc, Win32.GetModuleHandle(module.ModuleName), 0);
            };
        }
Example #19
0
        // Remove the keyboard hook
        private static void ForceUnsunscribeFromGlobalKeyboardEvents()
        {
            if (m_keyboard_hook_handle == 0)
            {
                return;
            }
            int result = Win32.UnhookWindowsHookEx(m_keyboard_hook_handle);

            m_keyboard_hook_handle = 0;
            m_keyboard_hook_proc   = null;
            if (result == 0)
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }
        }
Example #20
0
 public InteractionWatcher(HookManager hookMgr)
 {
     _hookMgr          = hookMgr;
     _keyboardCallback = KeyboardCallback;
     _mouseCallback    = MouseCallback;
     _hookMgr.WindowsHook(Win32.HookType.WH_KEYBOARD_LL, _keyboardCallback);
     _hookMgr.WindowsHook(Win32.HookType.WH_MOUSE_LL, _mouseCallback);
     _timer = new Timer(1000)
     {
         AutoReset = true
     };
     _timer.Elapsed += TimerCallback;
     _interaction    = false;
     _timer.Start();
 }
Example #21
0
 /*** Keyboard Hook ***/
 /*** Each class will have it's own overriding function as callback ***/
 protected void ApplyKeyboardHook()
 {
     _KeyboardHookProc = new Win32.HookProc(KeyboardHookCallback);
     using (Process curProcess = Process.GetCurrentProcess())
         using (ProcessModule curModule = curProcess.MainModule)
             _KeyboardHookID = Win32.SetWindowsHookEx(Win32.WH_KEYBOARD_LL, _KeyboardHookProc, Win32.GetModuleHandle(curModule.ModuleName), 0);
     if (_KeyboardHookID == IntPtr.Zero)
     {
         WriteLog("KeyboardHook Error : " + Marshal.GetLastWin32Error());
     }
     else
     {
         WriteLog("LowLevel-KeyboardHook installed !");
     }
 }
Example #22
0
        // Installs both or one of mouse and/or keyboard hooks and starts rasing events
        public void Start(bool InstallMouseHook, bool InstallKeyboardHook)
        {
            // Install Mouse hook only if it is not installed and must be installed
            if (m_hMouseHook == 0 && InstallMouseHook)
            {
                // Create an instance of HookProc.
                m_MouseHookProcedure = new Win32.HookProc(MouseHookProc);

                // Install hook
                m_hMouseHook = Win32.SetWindowsHookEx(Win32.WH_MOUSE_LL, m_MouseHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);

                // If SetWindowsHookEx fails.
                if (m_hMouseHook == 0)
                {
                    // Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.
                    int errorCode = Marshal.GetLastWin32Error();

                    // Do cleanup
                    Stop(true, false, false);

                    // Initializes and throws a new instance of the Win32Exception class with the specified error.
                    //throw new Win32Exception(errorCode);
                }
            }

            // Install Keyboard hook only if it is not installed and must be installed
            if (m_hKeyboardHook == 0 && InstallKeyboardHook)
            {
                // Create an instance of HookProc.
                m_KeyboardHookProcedure = new Win32.HookProc(KeyboardHookProc);

                // Install hook
                m_hKeyboardHook = Win32.SetWindowsHookEx(Win32.WH_KEYBOARD_LL, m_KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);

                // If SetWindowsHookEx fails.
                if (m_hKeyboardHook == 0)
                {
                    //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.
                    int errorCode = Marshal.GetLastWin32Error();

                    // Do cleanup
                    Stop(false, true, false);

                    // Initializes and throws a new instance of the Win32Exception class with the specified error.
                    throw new Win32Exception(errorCode);
                }
            }
        }
Example #23
0
 //设置Hook
 public bool SetHook()
 {
     if (hHook != IntPtr.Zero)
     {
         return(false);
     }
     Win32.HookProc mouseCallBack = new Win32.HookProc(MouseHookProcedure);
     hHook = Win32.SetWindowsHookEx(WH_MOUSE_LL, mouseCallBack,
                                    Win32.GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
     if (hHook != IntPtr.Zero)
     {
         gc = GCHandle.Alloc(mouseCallBack);
         return(true);
     }
     return(false);
 }
 /// <summary>Stops the application from listening to all keyboard messages.
 /// </summary>
 public void KeyBoardUnHook()
 {
     try
     {
         if (!hooked)
         {
             return;
         }
         Win32.UnhookWindowsHookEx(hookId);
         callback = null;
         hooked   = false;
     }
     catch (MarshalDirectiveException)
     {
         //if (!SuppressException) throw (e);
     }
 }
Example #25
0
        public KeybindManager(IConfigContext context)
        {
            _context   = context;
            _kbdHook   = KbdHook;
            _mouseHook = MouseHook;
            _kbdSubs   = new Dictionary <Sub, NamedBind <KeybindHandler> >();
            _mouseSubs = new Dictionary <MouseEvent, NamedBind <MouseHandler> >();

            SubscribeDefaults();

            var thread = new Thread(() =>
            {
                Win32.SetWindowsHookEx(Win32.WH_KEYBOARD_LL, _kbdHook, Process.GetCurrentProcess().MainModule.BaseAddress, 0);
                Win32.SetWindowsHookEx(Win32.WH_MOUSE_LL, _mouseHook, Process.GetCurrentProcess().MainModule.BaseAddress, 0);
                Application.Run();
            });

            thread.Name = "KeybindManager";
            thread.Start();
        }
Example #26
0
 public void Start()
 {
     if (!_isStarted && _hookType != 0)
     {
         //确保_hookCallback不是一个空的引用,如果是,GC会随机回收它,并且一个空的引用会爆出异常
         _hookCallback = new Win32.HookProc(HookCallbackProcedure);
         using (Process curPro = Process.GetCurrentProcess())
         {
             using (ProcessModule curMod = curPro.MainModule)
             {
                 _handleToHook = (int)Win32.SetWindowsHookExW(_hookType, _hookCallback, Win32.GetModuleHandle(curMod.ModuleName), 0);
             }
         }
         // 钩成功
         if (_handleToHook != 0)
         {
             _isStarted = true;
         }
     }
 }
Example #27
0
        public void Initialize()
        {
            if (hMouseHook == IntPtr.Zero)
            {
                // Create an instance of HookProc.
                MouseHookProcedure = new Win32.HookProc(MouseHookProc);

                //install hook
                hMouseHook = Win32.SetWindowsHookEx(
                    Win32.HookType.WH_MOUSE_LL,
                    MouseHookProcedure,
                    IntPtr.Zero,
                    0);

                //If SetWindowsHookEx fails.
                if (hMouseHook == IntPtr.Zero)
                {
                    int errorCode = Marshal.GetLastWin32Error();
                    throw new Win32Exception(errorCode);
                }
            }
        }
Example #28
0
 public KeyboardHook(Action <Key> cb)
 {
     OnKeyPress = cb;
     cbDel      = new Win32.HookProc((nCode, wParam, lParam) =>
     {
         if (nCode >= 0 && wParam == (IntPtr)Win32.WM_KEYDOWN)
         {
             int vkCode     = Marshal.ReadInt32(lParam);
             var keyPressed = KeyInterop.KeyFromVirtualKey(vkCode);
             if (OnKeyPress != null)
             {
                 OnKeyPress(keyPressed);
             }
         }
         return(Win32.CallNextHookEx(hookId, nCode, wParam, lParam));
     });
     using (var curProcess = Process.GetCurrentProcess())
         using (var curModule = curProcess.MainModule)
         {
             hookId = Win32.SetWindowsHookEx(Win32.WH_KEYBOARD_LL, cbDel,
                                             Win32.GetModuleHandle(curModule.ModuleName), 0);
         }
 }
Example #29
0
        public Form1()
        {
            InitializeComponent();

            // Create an instance of HookProc.
            m_MouseHookProcedure = new Win32.HookProc(MouseHookProc);

            // Install hook
            m_hMouseHook = Win32.SetWindowsHookEx(Win32.WH_CALLWNDPROC /*WH_MOUSE_LL*/, m_MouseHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);

            // If SetWindowsHookEx fails.
            if (m_hMouseHook == 0)
            {
                // Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.
                int errorCode = Marshal.GetLastWin32Error();
            }

            // Uninstall hook
            //int retMouse = Win32.UnhookWindowsHookEx(m_hMouseHook);

            // Reset invalid handle
            //m_hMouseHook = 0;
        }
Example #30
0
 public static extern IntPtr SetWindowsHookEx(Win32.HookTypes hookType, Win32.HookProc hookProc, IntPtr hInstance, int nThreadId);
Example #31
0
 private static void HookUnregister()
 {
     Win32.UnhookWindowsHookEx(c_hook);
     c_hook             = 0;
     MouseHookProcedure = null;
 }
 /// <summary>Allows the application to listen to all keyboard messages.
 /// </summary>
 public void KeyBoardHook()
 {
     callback = KeyboardHookCallback;
     hookId = Win32.SetWindowsHook((int)KeyboardHookEnum.KeyboardHook, callback);
     hooked = true;
 }
 /// <summary>Stops the application from listening to all keyboard messages.
 /// </summary>
 public void KeyBoardUnHook()
 {
     try
     {
         if (!hooked) return;
         Win32.UnhookWindowsHookEx(hookId);
         callback = null;
         hooked = false;
     }
     catch (MarshalDirectiveException)
     {
         //if (!SuppressException) throw (e);
     }
 }
Example #34
0
 public int SetHook()
 {
     hProc = new Win32.HookProc(MouseHookProc);
     hHook = Win32.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0);
     return(hHook);
 }