Как сделать эмуляцию нажатия клавиши
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 строчку.
Полезные сниппеты и функции
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 (у нее 📌есть аналоги). Почему она?
- Во-первых , в ней легко создать список для "авто-нажимания" компьютером нужных кнопок с выбранными интервалами времени между ними;
- Во-вторых , она имеет спец. драйвер (устанавливать его нужно по необходимости), позволяющий имитировать работу практически "настоящей" клавиатуры/мышки;
- В-третьих , ее относительно легко настроить - по готовой инструкции разберётся даже человек далекий от мира IT.
Установка Keyran стандартна, поэтому ее не рассматриваю. Перейду сразу же к своему примеру. 👇
1) Первый раз загрузив программу, перейдите в редактор макросов . См. левую верхнюю часть окна программы.
2) Затем создайте новый файл — слева внизу есть спец. кнопка.
3) Далее нужно сделать следующее:
- дать название своему макросу (чтобы легко отличить его от других);
- внизу на виртуальной клавиатуре/мышке выбрать ту кнопку, которую вам нужно впоследствии эмулировать/нажимать (я выбрал перемещение курсора мышки);
- в списке задач по центру появятся две строки - в первой можно указать координаты для смещения курсора мышки;
- во второй строке - можно отрегулировать время ожидания до следующей команды в списке — в моем случае это время составляет, по умолчанию, 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 не обновляет входной контент.
Читайте также: