Перетаскивание мышью - C# бот - PullRequest
0 голосов
/ 27 февраля 2020

Впервые делаю это. В настоящее время я создаю бота с помощью C# и хочу, чтобы мой бот мог перемещать мышь в заданную точку так, чтобы она выглядела как человек. Под этим я подразумеваю перетаскивание мыши, когда человек перемещает курсор в точку, на которой он пытается щелкнуть. В настоящее время мой бот C# мгновенно перемещает мышь в место, которое не выглядит человеком.

private static Point[] FindColor(Color color)
{
    int searchValue = color.ToArgb();
    List<Point> result = new List<Point>();
    using (Bitmap bmp = GetScreenShot())
    {
        for (int x = 0; x < bmp.Width; x++)
        {
            for (int y = 0; y < bmp.Height; y++)
            {
                if (searchValue.Equals(bmp.GetPixel(x, y).ToArgb()))
                    result.Add(new Point(x, y));
            }
        }
    }
    return result.ToArray();
}


// FUNCTIONS OCCUR BELOW
// Error message if program could not find bitmap within screenshot show error message

Color myRgbColor = new Color(); // Creates new colour called myRgbColor
myRgbColor = Color.FromArgb(51, 90, 9); // This colour equals the RGB value
Point[] points = FindColor(myRgbColor); // Create an array called points which list all the points found in the screen where the RgB value matches.
if (points.Length > 0)
{
    Cursor.Position = points[2]; // Move mouse cursor to first point (Point 0)
    Thread.Sleep(0200);
    MouseClick();
}
if (points.Length == 0)
{
    MessageBox.Show("No matches!"); // Return error
    goto checkore;
}

1 Ответ

0 голосов
/ 27 февраля 2020

Вы захотите использовать какой-нибудь таймер с обратным вызовом, чтобы шаг за шагом двигать мышь. Что касается самого движения, у вас есть мир возможностей, но это все математика.

Итак, давайте разберем проблему.

Что такое естественное движение мыши?

Скорость изменения позиции

Это не обязательно выглядит так, но когда вы двигаете мышью, вы просто устанавливаете ее положение несколько раз в секунду.

Количество изменений позиции в секунду эквивалентно скорости опроса вашей мыши. Частота опроса по умолчанию для мышей USB составляет 125 Гц (или 125 изменений положения в секунду, если хотите). Это значение мы будем использовать для нашего таймера: его обратный вызов будет вызываться 125 раз в секунду.

var timer = new Timer(1000 / 125d);
timer.Elapsed += MoveMouse;

void MoveMouse(object sender, ElpasedEventArgs e) { }

Скорость и ускорение

При перемещении мыши расстояние между двумя положение курсора не является постоянным, потому что вы быстры, когда начинаете двигать мышь, но замедляетесь, когда приближаетесь к предмету, на котором хотите, чтобы курсор был включен.

Лично я лично могу двумя способами обычно перемещайте мою мышь в зависимости от контекста / настроения:

  1. Одно быстрое равномерное движение, чтобы приблизиться к пункту назначения, затем одно медленное, чтобы исправить и войти в него (я обычно go мимо пункт назначения во время первого хода)
  2. Одно средне-медленное движение с небольшим замедлением, за которым следует более сильное замедление в конце

Общая скорость движения также зависит от трех факторов :

  1. Расстояние между курсором и пунктом назначения
  2. Размер области назначения
  3. Ваша личная скорость
...