示例#1
0
        public static void Main()
        {
            // Manual loading

            /*IMouseHook mouseHook = new Core.Windows.Mouse.MouseHook();
             * // IMouseHook mouseHook = new Core.Windows.Mouse.RawMouseHook();
             * IKeyboardHook keyboardHook = new Core.Windows.Keyboard.KeyboardHook();
             * IMessageLoop loop = new Core.Windows.MessageLoop.MessageLoop();*/

            // Dynamic loading
            IHook[] hooks = IHook
                            .Load(Environment.CurrentDirectory) // Load all hooks from current directory's DLLs
                            .Where(x => x.CanBeInstalled)       // Select only those hooks that are supported by the current OS
                            .Where(x => x.CanPreventDefault)    // We're interested in hooks that can prevent default event actions
                            .ToArray();

            IMouseHook    mouseHook    = hooks.OfType <IMouseHook>().First();
            IKeyboardHook keyboardHook = hooks.OfType <IKeyboardHook>().First();
            IMessageLoop  loop         = IMessageLoop.Load(Environment.CurrentDirectory).First(x => x.CanBeRunned);

            CancellationTokenSource source = new CancellationTokenSource();

            loop.OnEvent += Log;

            // Stop message loop on Ctrl + Shift + S
            keyboardHook.OnEvent += (_, e) =>
            {
                if (e.Key.HasFlags(Keys.Control, Keys.Shift, Keys.S))
                {
                    source.Cancel();
                }
            };

            // Disable 'M'
            keyboardHook.OnEvent += (_, e) =>
            {
                if (e.CanPreventDefault && e.Key.HasFlag(Keys.M))
                {
                    e.PreventDefault();
                }
            };

            // Disable middle mouse button
            mouseHook.OnEvent += (_, e) =>
            {
                if (e.CanPreventDefault && e.MouseEventType == MouseEventType.Key && e.Key == MouseButtons.Middle)
                {
                    e.PreventDefault();
                }
            };

            Console.WriteLine("Hook!");
            Console.WriteLine("Press CTRL + SHIFT + S to stop!");

            loop.Run(source.Token, mouseHook, keyboardHook);

            Console.Write("Press any key to exit...");
            Console.ReadKey(true);
        }