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); }
/// <inheritdoc cref="Run(IMessageLoop, long, Func{bool, bool}, IHook[])"/> public static void Run(this IMessageLoop loop, IEnumerable <IHook> hooks) => loop.Run(hooks, quit => !quit);
/// <inheritdoc cref="Run(IMessageLoop, long, Func{bool, bool}, IHook[])"/> public static void Run(this IMessageLoop loop, Func <bool, bool> goOnPredicate, params IHook[] hooks) => loop.Run(hooks, goOnPredicate);
/// <inheritdoc cref="Run(IMessageLoop, long, Func{bool, bool}, IHook[])"/> public static void Run(this IMessageLoop loop, params IHook[] hooks) => loop.Run(hooks, quit => !quit);
/// <inheritdoc cref="Run(IMessageLoop, long, Func{bool, bool}, IHook[])"/> public static void Run(this IMessageLoop loop, IEnumerable <IHook> hooks, long processId) => loop.Run(hooks, processId, quit => !quit);
/// <inheritdoc cref="Run(IMessageLoop, long, IHook[])"/> public static void Run(this IMessageLoop loop, Process process, params IHook[] hooks) => loop.Run(hooks, process.Id, quit => !quit);
/// <inheritdoc cref="Run(IMessageLoop, IEnumerable{IHook}, long, CancellationToken)"/> public static void Run(this IMessageLoop loop, CancellationToken cancellationToken, params IHook[] hooks) => loop.Run(hooks, quit => !(quit || cancellationToken.IsCancellationRequested));
/// <inheritdoc cref="Run(IMessageLoop, IEnumerable{IHook}, long, CancellationToken)"/> public static void Run(this IMessageLoop loop, IEnumerable <IHook> hooks, CancellationToken cancellationToken) => loop.Run(hooks, quit => !(quit || cancellationToken.IsCancellationRequested));