Как сделать эмуляцию нажатия клавиши

Обновлено: 30.06.2024

EndoHokage

Активный

Здравствуйте, можно ли как то имитировать нажатие клавиши в луа?
Что бы сервер думал что ты нажимаешь эти клавиши на клавиатуре

deddosouru

Y = gunid + 64
F =keydata + 16
H = gunid + 192
C = keydata + 2
N = gunid + 128
LMB = keydata + 4
RMB = keydata + 128
TAB = keydata + 1
SPRINT = keydata +8
ALT = keydata + 1024
JUMP = keydata + 32

итак. к чему я это говорю
для нажатия альта я использовал функцию фипа которая копирует синхру в таблицу

maestto

Известный

это не отправка пакета серверу, а полноценная эмуляция нажатия клавиш - setVirtualKeyDown(int vkey, bool down) . номера клавиш можно узнать тут.

пример, зажатие клавиши w на секунду:

есть, конечно, ещё одна, но более ограниченная в плане количества клавиш (и не только), функция setGameKeyState(int key, int state) статья на дев_вики и дополнительная информация об аргументах функции

EndoHokage

Активный

это не отправка пакета серверу, а полноценная эмуляция нажатия клавиш - setVirtualKeyDown(int vkey, bool down) . номера клавиш можно узнать тут.

пример, зажатие клавиши w на секунду:

есть, конечно, ещё одна, но более ограниченная в плане количества клавиш (и не только), функция setGameKeyState(int key, int state) статья на дев_вики и дополнительная информация об аргументах функции

sdfaw

Активный

deddosouru

Смотрю аниме, служу Сатане

Y = gunid + 64
F =keydata + 16
H = gunid + 192
C = keydata + 2
N = gunid + 128
LMB = keydata + 4
RMB = keydata + 128
TAB = keydata + 1
SPRINT = keydata +8
ALT = keydata + 1024
JUMP = keydata + 32

итак. к чему я это говорю
для нажатия альта я использовал функцию фипа которая копирует синхру в таблицу

Adam_Rockwell

Активный

Пздц, а можно по подробнее пожалуйста, как нажать на Y например?
Код ниже не работает, выдаёт ошибку attempt to call global 'samp_create_sync_data' (a nil value) на 1 строчку.

MrBidloKoder

Известный

Пздц, а можно по подробнее пожалуйста, как нажать на Y например?
Код ниже не работает, выдаёт ошибку attempt to call global 'samp_create_sync_data' (a nil value) на 1 строчку.

www.blast.hk

Полезные сниппеты и функции

Adam_Rockwell

Активный

Ну если чё, нажать Y можно просто одной строкой кода, уже разобрался)

Vintik

Играющий тренер

Ну если чё, нажать Y можно просто одной строкой кода, уже разобрался)

Это разные вещи вообще-то.
Способ, который был выше, отправляет информацию серверу.
Твой способ лишь говорит ГТА, что нажата клавиша, и уже сама ГТА отправляет эту информацию серверу (тот способ лучше, короч)

Известный

сервер считывает нажатия не всех кнопок. вот тебе список который я составил методом тыка

итак. к чему я это говорю
для нажатия альта я использовал функцию фипа которая копирует синхру в таблицу

Vintik

Играющий тренер

TimeLordRu

Активный

Vintik

Играющий тренер
Известный

Vintik

Играющий тренер

На примере клавиши Alt. Названия всех клавиш, информация о нажатии которых передаётся на сервер, можно найти тут:

struct SampKeys <
uint8_t primaryFire : 1;
uint8_t horn_crouch : 1;
uint8_t secondaryFire_shoot : 1;
uint8_t accel_zoomOut : 1;
uint8_t enterExitCar : 1;
uint8_t decel_jump : 1;
uint8_t circleRight : 1;
uint8_t aim : 1;
uint8_t circleLeft : 1;
uint8_t landingGear_lookback : 1;
uint8_t unknown_walkSlow : 1;
uint8_t specialCtrlUp : 1;
uint8_t specialCtrlDown : 1;
uint8_t specialCtrlLeft : 1;
uint8_t specialCtrlRight : 1;
uint8_t _unknown : 1;
>;

Допускается использование одновременно текста, переменных и специальных клавиш.

Статичный текст

Вводим статичный текст.

Выставляем параметры ввода.

Текст останется неизменным на протяжении всего выполнения проекта.

Работа с переменными

Переменная в экшене позволит каждый раз вводить новый текст.

Устанавливаем необходимую переменную.

Фиксируем ползунок задержки.

Текст будет меняться в зависимости от содержания переменной.

Использование специальных клавиш

Позволяет эмулировать клавиши Enter, CTRL, END и тд.

Устанавливаем курсор мыши в поле Текст.

Нажатием горячих клавиш CTRL + Space вызываем контекстное меню.

Выбираем из списка нужную клавишу.

Пример использования

Многие ресурсы научились отслеживать нажатия клавиш, поэтому для максимальной надежности можно заполнять формы через эмуляцию клавиатуры.

Доброго дня!

В последние пару лет удаленная работа набрала популярность, и меня иногда просят подсказать, как сделать так, чтобы определенные кнопки на клавиатуре/мышки нажимались сами по себе (пока чел. отошел от ПК). Например, это может быть удобно, чтобы удаленный ПК не засыпал и не приходилось заново к нему подключаться.

Чаще всего, отвечая на подобные вопросы, я приводил ссылку на заметку о макросах, и рекомендовал парочку утилит. Однако, порой получал в ответ: "Ты подскажи как именно, покажи на примере. ".

Что же, сегодня покажу небольшой пример (не идеальный, но всё же). 👌

Примечание : не ставлю себе задачи показать все способы решения подобной задачи — в заметке предложен лишь один из вариантов (однако, универсальный и почти бесплатный).

Для выше-оговоренной задачи, думаю, отлично подходит программа 📌Keyran (у нее 📌есть аналоги). Почему она?

  1. Во-первых , в ней легко создать список для "авто-нажимания" компьютером нужных кнопок с выбранными интервалами времени между ними;
  2. Во-вторых , она имеет спец. драйвер (устанавливать его нужно по необходимости), позволяющий имитировать работу практически "настоящей" клавиатуры/мышки;
  3. В-третьих , ее относительно легко настроить - по готовой инструкции разберётся даже человек далекий от мира IT.

Установка Keyran стандартна, поэтому ее не рассматриваю. Перейду сразу же к своему примеру. 👇

1) Первый раз загрузив программу, перейдите в редактор макросов . См. левую верхнюю часть окна программы.

Редактор макросов

2) Затем создайте новый файл — слева внизу есть спец. кнопка.

Создать файл

3) Далее нужно сделать следующее:

  1. дать название своему макросу (чтобы легко отличить его от других);
  2. внизу на виртуальной клавиатуре/мышке выбрать ту кнопку, которую вам нужно впоследствии эмулировать/нажимать (я выбрал перемещение курсора мышки);
  3. в списке задач по центру появятся две строки - в первой можно указать координаты для смещения курсора мышки;
  4. во второй строке - можно отрегулировать время ожидания до следующей команды в списке — в моем случае это время составляет, по умолчанию, 64 мс (время можно задавать также в секундах и минутах) . См. скриншоты ниже. 👇

Создаем макрос

Настройка времени ожидания

Настройка времени ожидания

4) Затем я добавил еще одно смещение курсора и нажатие кнопки "4" (список кнопок создавайте тот, который вам нужен! Чтобы компьютер просто не засыпал — можно имитировать движения мышки).

Готово!

5) Когда список кнопок будет готов — сохраните макрос — а далее перед вами появится главное окно с клавиатурой и мышкой. 👇

Выберите указателем мышки ту клавишу, на которую вы хотите "повесить" запуск макроса — в моем случае я указал "1": далее выберите нужный макрос и режим его работы (если нужно периодически шевелить мышку — то логично остановиться на варианте "Выполнять до повторного нажатия" ).

Вешаем на нужную клавишу

Вешаем на нужную клавишу

6) В общем-то, почти все готово!

Осталось только в нижней части окна нажать кнопку запуска программы Keyran (напоминает "Play") и выбранную вами клавишу (в моем случае "1"). Тут же начнет выполняться наш макрос — т.е. кнопки будут нажиматься "самостоятельно" автоматически по созданному списку!

Запускаем программу и жмем заветную клавишу

Запускаем программу и жмем заветную клавишу

Как это работает на практике — см. нижеприведенное видео.

"4-ки" в блокноте набираются сами + бегает туда-сюда курсор мышки. Разумеется, такой список клавиш и нажатий я сделал спец. для наглядности — на практике, обычно, делают по-другому. 😉

Можно ли программно моделировать события нажатия клавиш в JavaScript?

Версия без jquery, которая работает как в webkit, так и в gecko:

Похоже, что в Chromium есть ошибка, которая event.which всегда будет 0 при использовании document.createEvent("KeyboardEvent") . @lluft поделился подробностями и обходным путем, который работал для меня, в этом комментарии в другой ветке. По сути, вам нужно использовать document.createEvent('Event') для создания общего события, а затем установить тип keydown и дать keyCode свойство, равное charcode ключа.

Если вы можете использовать jQuery 1.3.1:

Привет, что я имел в виду: 1. Зарегистрировать ключевое событие (буква e выполняет JS) 2. Из другого метода я хочу программно нажать букву e)

Это не работает должным образом в Chrome, извините. jQuery создает Event, но без важных атрибутов - which, charCode, keyCode.

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

Ниже приведен пример того, как этого добиться в стандарте W3C DOM вместе с jQuery:

Но в последнее время [DOM] не существует способа вызвать события, оставляющие браузер-песочницу. И все основные поставщики браузеров будут придерживаться этой концепции безопасности.

Что касается плагинов, таких как Adobe Flash, которые основаны на NPAPI и позволяют обходить песочницу: это постепенный отказ ; Firefox .

Детальное объяснение:

Вы не можете и не должны по соображениям безопасности (как уже указывал Пекка). Вы всегда будете требовать взаимодействия пользователя между ними. Кроме того, представьте, что пользователи браузеров могут подать в суд на пользователей, поскольку различные программные события на клавиатуре приведут к подделке атак.

Смотрите этот пост для альтернатив и более подробной информации. Всегда есть флэш на основе копирования и вставки. Вот элегантный пример . В то же время это свидетельство того, почему Интернет отходит от поставщиков плагинов.

В случае политики CORS opt-in применяется аналогичный подход к безопасности для программного доступа к удаленному контенту.

Ответ
таков: в нормальных условиях нет возможности программно запускать клавиши ввода в изолированной среде браузера .

Итог: я не говорю, что это не будет возможно в будущем, при специальных режимах браузера и / или привилегиях для достижения конечной цели игры или подобного пользовательского опыта. Однако до входа в такие режимы у пользователя будут запрашиваться разрешения и риски, аналогичные модели полноэкранного API .

Полезно: в контексте KeyCodes этот инструмент и сопоставление кодов ключей пригодятся.

Раскрытие: ответ основан на ответе здесь .

Это то, что я получаю, когда запускаю ваш jQuery в Chrome: Uncaught ReferenceError: символ не определен

Вы можете отправлять события клавиатуры на элемент, подобный этому

Я думаю, что в ответе следует упомянуть тот факт, что отправленное в событии js не обновляет входной контент.

Читайте также: