// Enables keys interception with selected |interception_method|. Backs off to WinAPI if failed loading interception driver.
        public bool Reset()
        {
            lock (Helpers.locker)
            {
                Stop();

                if (Options.Instance.accessibility_mode)
                {
                    mouse_controller = new AccessibilityMouseController(eye_tracking_mouse);
                }
                else
                {
                    mouse_controller = new DefaultMouseController(eye_tracking_mouse);
                }

                if (Options.Instance.key_bindings.interception_method == KeyBindings.InterceptionMethod.OblitaDriver)
                {
                    input_provider = new OblitaInterceptionInputProvider(mouse_controller);
                    input_provider.Load();

                    if (input_provider.IsLoaded)
                    {
                        return(true);
                    }
                }

                input_provider = new WinApiInputProvider(mouse_controller);
                input_provider.Load();

                return(Options.Instance.key_bindings.interception_method == KeyBindings.InterceptionMethod.WinApi);
            }
        }
        public void Stop()
        {
            lock (Helpers.locker)
            {
                eye_tracking_mouse.StopControlling();
                if (input_provider != null && input_provider.IsLoaded)
                {
                    input_provider.Unload();
                }
                input_provider = null;

                if (mouse_controller != null)
                {
                    mouse_controller.Dispose();
                }
                mouse_controller = null;
            }
        }