Эмуляция клавиатуры. Нажатие клавиши определенное число раз

SolidFEAR

Новичок
Регистрация
03.08.2020
Сообщения
4
Благодарностей
0
Баллы
1
Подскажите, как нажать клавишу {DOWN} столько раз, сколько перед экшеном Эмуляция клавиатуры сгенерирует экшн Random? Последний генерирует, допустим, число 25 и записывает в переменную data. Как привязать теперь эту переменную к количеству нажатий при помощи эмуляции клавиатуры?
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Подскажите, как нажать клавишу {DOWN} столько раз, сколько перед экшеном Эмуляция клавиатуры сгенерирует экшн Random? Последний генерирует, допустим, число 25 и записывает в переменную data. Как привязать теперь эту переменную к количеству нажатий при помощи эмуляции клавиатуры?
Вот ответ на ваш вопрос. =)

Так вроде должно работать.

C#:
int count = Convert.ToInt32(project.Variables["test"].Value);

for (int i = 0; i < count; i++)
{
    instance.ActiveTab.KeyEvent("Down", "press", "");
    System.Threading.Thread.Sleep(500); // пауза
}
 
  • Спасибо
Реакции: SolidFEAR

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Если что-то не понятно, спрашивайте, постараюсь помочь.
 
  • Спасибо
Реакции: SolidFEAR

SolidFEAR

Новичок
Регистрация
03.08.2020
Сообщения
4
Благодарностей
0
Баллы
1
Спасибо большое! Забыл добавить, что после надо нажать клавишу энтер. Но, как понимаю, после завершения цикла for надо дописать
C#:
instance.ActiveTab.KeyEvent("Enter", "press", "");
Что и сделал. Есть вопросы некоторые.
1. В первых кавычках стоит название клавиши, в следующих то, что нужно сделать с ней, а следующие кавычки пустые. Для чего?
2. Как сделать нажатие на клавишу с разной задержкой? То есть чтобы в периоды между концом нажатия и начала следующего проходило разное количество времени?
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Спасибо большое! Забыл добавить, что после надо нажать клавишу энтер. Но, как понимаю, после завершения цикла for надо дописать
C#:
instance.ActiveTab.KeyEvent("Enter", "press", "");
Что и сделал. Есть вопросы некоторые.
1. В первых кавычках стоит название клавиши, в следующих то, что нужно сделать с ней, а следующие кавычки пустые. Для чего?
2. Как сделать нажатие на клавишу с разной задержкой? То есть чтобы в периоды между концом нажатия и начала следующего проходило разное количество времени?

1. Тут ответ. Пустые кавычки например Для нажатий доп.клавиш, как по ссылке, которую я дал, там же и примеры нажатий.
2. Тут ответ.

Код создает задержку. Сами вставить сможете?

C#:
// Случайная пауза от 1 до 5 сек.
Random rnd = new Random();
System.Threading.Thread.Sleep(rnd.Next(1, 5) * 1000);

Так разве не работает?
C#:
int count = Convert.ToInt32(project.Variables["test"].Value);

for (int i = 0; i < count; i++)
{
    instance.ActiveTab.KeyEvent("Down", "press", "");
    System.Threading.Thread.Sleep(500); // пауза
   
       instance.ActiveTab.KeyEvent("Enter", "press", "");
    System.Threading.Thread.Sleep(500); // пауза
}
 
Последнее редактирование:
  • Спасибо
Реакции: SolidFEAR

SolidFEAR

Новичок
Регистрация
03.08.2020
Сообщения
4
Благодарностей
0
Баллы
1
Работает, но не так как надо. Код же тогда чередует действия внутри цикла. Идея в том, чтобы после определенного количество нажатий вниз, нажать энтер. А так он чередует количество нажатий вниз с количеством нажатий энтер. Поэтому энтер вынес за пределы цикла.

Код вставил с задержкой, спасибо. Не подскажете, как сделать, чтобы задержки были дробными? Я дописал к Next Double как в примере в интернете, но код выдает ошибку.
C#:
System.Threading.Thread.Sleep(rnd.NextDouble(0.5, 1, 2) * 1000);
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Не подскажете, как сделать, чтобы задержки были дробными? Я дописал к Next Double как в примере в интернете, но код выдает ошибку.
C#:
System.Threading.Thread.Sleep(rnd.NextDouble(0.5, 1, 2) * 1000);
А если заменить умножитель * 1000 , например на 500? Вы должны понимать, что (rnd.Next(1, 5)) - это секунды, которые превращает задержку в миллисекунды, если умножить на 1000*1 , получится 1000 миллисекунд = 1 секунда. 500 = это пол секунды. А число 1000 сравнивает к целым.
В нашем случае вы берете рандомную цифру от 1 до 5 и умножаете его, что бы получить секунды в миллисекундах.


Хотя я не уверен, что оно точно заработает так, но попытаться стоит.
C#:
// Случайная пауза от 1 до 5 сек.

Random rnd = new Random();

System.Threading.Thread.Sleep(rnd.Next(1, 5) * 350);
 
Последнее редактирование:
  • Спасибо
Реакции: SolidFEAR

SolidFEAR

Новичок
Регистрация
03.08.2020
Сообщения
4
Благодарностей
0
Баллы
1
Точно. На поверхности же ответ лежит. Спасибо большое!
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)