@komnotmr
студент

Как правильно эмулировать нажатие клавиш на C#?

Есть флеш игра типа "Guitar Hero" (Мастер гитары в контакте). Решил ради интереса написать программу, которая могла бы проходить хотя бы простенькие уровни.

Алгоритм программы следующий :
1) Получаю части экрана 10 х 10 пикселей в bmp на всех дорожках перед самым концом грифа.
2) С помощью getPixel(5,5) проверяю в какой диапазон входит цвет.
3) В зависимости от цвета вызываю sendKeys.Send() с нужной клавишей (A,S,D,J,K,L).

Столкнулся со следующей проблемой:
функция sendKeys.Send() успевает сработать несколько раз ( иногда доходит до десятка ), но при этом очень много нот на дорожках пропускается.
Почему ноты нажимаются не всегда ? Насколько это эффективный подход и какой подход был бы лучше ?

Собственно код (пока для одной дорожки):
private void label6_Click(object sender, EventArgs e)
{
     main();
}

private void analys_map(Bitmap map)
{
     var pixel = map.GetPixel(5, 5);//Синий J
            //Входит ли в нужный цветовой диапазон
            if (pixel.R > 20 && pixel.R < 25 &&
                pixel.G > 55 && pixel.G < 65 &&
                pixel.B > 135 && pixel.B < 145)
            {
                label4.Text = (Convert.ToInt32(label4.Text) + 1).ToString();//Количество нот, которые обнаружил
                SendKeys.SendWait("j"); 
            }


}

private  void main()
{
     int h = 40;
     while (true)
     {
                System.Threading.Thread.Sleep(30);//Задержка немного улучшила положение вещей.
                Application.DoEvents();
                int c = this.Location.Y + this.Size.Height;
                int x = this.Location.X;
                pictureBox4.Image = screen(x + pictureBox4.Location.X, c + h);//возвращает bitmap
                analys_map(new Bitmap(pictureBox4.Image));
        }


}
  • Вопрос задан
  • 1133 просмотра
Решения вопроса 1
Я пользовался библиотекой InputSimulator. Не всё, но работает
https://inputsimulator.codeplex.com
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
arxont
@arxont
C# программист
Рекомендую посмотреть в стороны https://github.com/wieschoo/BotSuite
Там есть и нажатие клавиш, и работа с мышью, и инструменты распознавания. Очень упрощает написание всевозможных ботов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы