예제 #1
0
        public static void Main(string[] args)
        {
            var frequency = TimeSpan.FromSeconds(55); // one move each 55 seconds.
            var delta     = 1;                        // 1 pixel

            if (args != null)
            {
                if (args.Length >= 1)
                {
                    if (Int32.TryParse(args[0], out int parameter))
                    {
                        if (parameter < TimeSpan.FromHours(1).TotalSeconds)
                        {
                            frequency = TimeSpan.FromSeconds(parameter);
                        }
                        else
                        {
                            Console.WriteLine($"The frequency of {parameter} is longer than one hour. Using {frequency.TotalSeconds} seconds instead.");
                        }
                    }
                    else
                    {
                        Console.WriteLine($"The parameter {parameter} is invalid. Using {frequency.TotalSeconds} seconds instead.");
                    }
                }
                if (args.Length >= 2)
                {
                    if (Int32.TryParse(args[1], out int parameter))
                    {
                        if (parameter > 0 && parameter < 20)
                        {
                            delta = parameter;
                        }
                        else
                        {
                            Console.WriteLine($"The delta of {parameter} is invalid. Using {delta} pixels instead.");
                        }
                    }
                    else
                    {
                        Console.WriteLine($"The parameter {parameter} is invalid. Using {delta} pixels instead.");
                    }
                }
            }

            Console.WriteLine("DizzyMouse");
            var pixels = delta == 1 ? "pixel" : "pixels";

            Console.WriteLine($"Simulating presence by moving the mouse {delta} {pixels} each {frequency} seconds.");

            var tokenSource = new CancellationTokenSource();
            var task        = CreateNeverEndingTask(now =>
            {
                // https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-input
                var input = new MOUSE_INPUT()
                {
                    TYPE = 0, // INPUT_MOUSE
                    // https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-mouseinput
                    dx          = delta,
                    dy          = delta,
                    mouseData   = 0,
                    dwFlags     = 1,
                    time        = 0,
                    dwExtraInfo = (IntPtr)0
                };

                var sizeOf = Marshal.SizeOf(typeof(MOUSE_INPUT));

                while (true)
                {
                    input.dx = input.dy = delta;

                    if (SendInput(1, ref input, sizeOf) != 1)
                    {
                        Console.WriteLine("Failed to move the mouse");
                    }

                    delta *= -1;

                    Thread.Sleep(frequency);
                }
            }, tokenSource.Token);

            task.Post(DateTimeOffset.Now);

            Console.ReadKey();

            using (tokenSource)
            {
                tokenSource.Cancel();
            }

            tokenSource = null;
            task        = null;
        }
예제 #2
0
 private static extern uint SendInput(uint nInputs, ref MOUSE_INPUT pInputs, int cbSize);