- имитация нажатия клавиш в консоли
- Эмуляция нажатия мультимедийных клавиш в Windows, Linux и Mac OS X
- Эмуляция нажатия клавиатуры в Windows
- Эмуляция нажатия клавиатуры в Linux
- Эмуляция нажатия клавиатуры в Mac OS X
- Простой авто-кликер в Linux c помощью небольшого BASH скрипта
- как сделать имитацию ввода с клавиатуры в Linux? Готовые программы не интересуют
- емаксом
- Re: емаксом
- Удаленное управление компьютером по сети: Передача событий клавиатуры (Linux/X11)
- Выводы
- Исходники
имитация нажатия клавиш в консоли
Ребята подскажите пожалуйста прогу для имитации нажатия клавиш в консоли. xdotool не подходит так как для неё нужны иксы.
Лучше скажи, что хочешь добиться.
copy your-file.txt CON: ?
спрашивале на форуме Маза — «как стереть файлы, не нажимая кнопок, в определённый день и время ?»
получилось, тремя .bat файлами
интересно, ради эксперимента. на практике — отстой и фанаберия.
> Ребята подскажите пожалуйста прогу для имитации нажатия клавиш в консоли
anon_666 спасибо за помощь, но я не силён в C, насколько я понимаю это не полный код, а кусок программы.
Вообще мне это нужно для реализации автоматического входа.
В pam_usb-0.3.2 имя пользователя, если он заведён один, автоматом не пишется. Я хочу сделать что бы вставил флешку и ничего не набирая вошёл.
При помощи cat пробовал не получается.
Вот нафига ты эту хрень пишешь? Ясно же, что человек хочет решить проблему через жопу, и ты ему в этом помогаешь. Для начала надо с задачей определиться.
анониму почему через жопу??
есть новый пакет pam_usb-0.4.2 там по моему если заведён один пользователь то можно настроить что при втыкании флешки сразу произойдёт вход, но для работы этой версии необходим Python
у меня Python не установлен,
так значит удалить старую версию pam_usb-0.3.2 поставить Python и
потом установить новую версию pam_usb-0.4.2 это нормально, а
написать правило для udev что бы при втыкании флешки исполнялся маленький скрипт или программа, которая набирала бы логин и нажимала клавишу ENTER это через жопу, странно как то получается ))))))
anon_666 огромное спасибо за помощь, но мне немного не такая программа нужна, необходимо что бы ей можно было передавать в параметрах командной строки клавишу которую хочу нажать, или строку, и ещё хотелось бы что бы можно было имитировать нажатия ENTER, Ctrl, Alt, Tab, и связки клавиш, например Ctrl+a. Попробую переделать твою программу но наверное у меня не получиться. Если у тебя есть немного свободного времени и тебя не затруднит, переделай её пожалуйста, заранее буду благодарен.
Источник
Эмуляция нажатия мультимедийных клавиш в Windows, Linux и Mac OS X
В перечислении Qt::Key для события QKeyEvent определены 15 типов клавиш управления мультимедиа (см. таблицу в конце статьи). Все они могут быть использованы в фильтре событий (installEventFilter) для обработки нажатия клавиш на мультимедийной клавиатуре (позволяющей управлять аудиоустройством и воспроизведением).
В статье рассмотрена обратная задача — отправка в систему команд управления мультимедиа путем эмуляции нажатия соответствующих клавиш в Windows, Linux и MacOSX (операционные системы упорядочены по времени, потраченному на поиск решения). Представленный в статье материал может быть отправной точкой к дальнейшему изучению вопроса кроссплатформенной отправки событий в цикл обработки системных сообщений.
Прежде чем перейти непосредственно к описанию исходного кода давайте рассмотрим, где вообще может применяться эмуляция мультимедийных клавиш, например:
- создание виджетов управления воспроизведением аудио;
- эмуляция пользовательского ввода при тестировании приложений;
- создание приложения для удаленного управления аудиосистемой. В данном случае приложение на компьютере выступает в качестве сервера, а клиентом является смартфон. Такая связка позволит управлять аудио/видео не вставая с дивана или, например, автоматически ставить на паузу воспроизведение при поступлении входящего звонка;
- создание приложения, «расшаривающего» клавиатуру и мышь на два и более компьютеров по сети (предварительно дополнив представленный код до полного набора клавиш);
- создание систем «умный дом», новых человеко-машинных интерфейсов (управление голосовыми командами и др.).
Так как QEvent позволяет отправлять сообщение только конкретному объекту «внутри» приложения, то стандартными средствами Qt эмулировать нажатия клавиш не получится. Для этого будем использовать системные вызовы Api (в случае с Windows) или соответствующие библиотеки (X Window System в Linux и ряд фреймворков в Mac OS X).
Для удобства описания почти всю реализацию отправки сообщений разместим в функции sendKeyEventToSystem(Qt::Key qtKey), которой передается код клавиши из перечисления Qt::Key. Данная функция и будет вызываться из слотов, например:
Платформенно-зависимый код будем отделять директивами #ifdef OS_TYPE и #endif (еще часть кода на Objective-C вынесем в отдельный файл macx.mm, но об этом позже).
Эмуляция нажатия клавиатуры в Windows
В данной операционной системе за отправку сообщений отвечает функция SendInput. Она позволяет отправлять сообщения с кодами, полный перечень которых представлен на странице MSDN Virtual-Key Codes.
Для использования этой функции необходимо подключить заголовочный файл .
Примеров использования данной функции в интернете много и ее применение не должно вызвать проблем, поэтому сразу привожу код (в части Windows):
Здесь и далее в примерах будут использоваться всего 3 клавиши. В конце статьи приведена таблица соответствия кодов.
Эмуляция нажатия клавиатуры в Linux
Для эмуляции клавиш в Linux, на мой взгляд, проще всего использовать библиотеку разработчиков libXtst (X11 Record extension library).
Для ее получения из пакетов необходимо выполнить команду:Также будет необходимо подключить библиотеку в файле проекта:
В начале файла подключим необходимые заголовочные файлы и определим ряд констант, соответствующих кодам мультимедийных клавиш (дело в том, что в файле X11/keysymdef.h коды для мультимедийных клавиш отсутствуют).
Код эмуляции в части Linux:
Эмуляция нажатия клавиатуры в Mac OS X
Попытки найти решение для MacOS X не приносили плодов (скупые примеры были написаны на Objective-C), до тех пор, пока в гугле не натолкнулся на статью с хабра Интеграция приложений Qt в среду Mac OS X (с использованием Cocoa и Objective-C++). Мне уже ранее попадалась англоязычная статья, в которой описывалось, как изолировать код C++ для использования в Objective-C приложении. Мне же нужно было совершенно противоположное — изолировать Objective-C код (который выполнял нужные мне функции, но в то же время на который ругался компиллятор). Все оказалось достаточно просто:
1. создал файл macx.mm и разместил в нем Objective-С код (при этом в файле проекта автоматически появилась строка
2. создал файл macx.h и разместил в нем объявление функции из macx.mm (добавив #include «macx.h» в macx.mm).
3. в файле проекта добавил подключение необходимых фреймворков, в частности:
4. Внутри макроса условной компиляции для Mac OS X добавил необходимые хидеры и macx.h.
5. В уже знакомой вам switch-case структуре вставил вызовы новоиспеченной функции.
Таким образом в начале файла у нас появилась конструкция для Mac OS X:
В функцию sendKeyEventToSystem добавляется следующий код:
Cодержимое файла mac.mm:
Заключение:
Для меня было немного странно, что до сих пор не существует открыто доступной кроссплатформенной библиотеки, позволяющей выполнять отправку сообщений (в том числе события клавиатуры, мыши и д.р.). Во всяком случае мне такую библиотеку так и не получилось найти. Представленный код далек от совершенства (представляю, как разрастется switch-case последовательность при добавлении новых клавиш). Но тем не менее пусть это будет небольшой вклад в общую копилку базы знаний о написании кросплатформенных приложений.
В ходе работы над статьей было замечено, что VirtualBox перехватывает нажатия мультимедийных клавиш (проверялось на Ubuntu — c «железа» все работало). Данного недостатка лишена WMWare (проверялось на Mac OS X).
Приложение: Перечень мультимедийных клавиш и их определений (с помощью #define).
Источник
Простой авто-кликер в Linux c помощью небольшого BASH скрипта
Авто-кликер может понадобиться в разных случаях: если нужно автоматизировать нажатие какой-нибудь кнопки, или фармить печеньки в Cookie Clicker. Что-бы без лишней траты времени это сделать, нам понадобится программа xdotool.
- Создаём текстовый файл с любым названием, в домашней директории(так будет удобнее в будущем запускать сам авто-кликер).
- Затем открываем его и вставляем туда такой текст:
Где «2048» в третьей строке — это количество желаемых нажатий, а «1.5» в 5 строке — это интервал в секундах между нажатиями. sleep 5 (2 строка) — это отсчёт в секундах до начала цикла. Ну и ещё прикручено echo для статистики.
Кликать будет левая кнопка мыши. Чтобы эмулировать нажатия правой кнопки мыши, нужно в строке «xdotool click 1» заменить единицу на 3.
- Сохраняем файл.
- Затем нужно сделать наш файл исполняемым. Для этого нужно вписать в терминал команду:
chmod u+x название-файла
Авто-кликер готов! Чтобы его запустить, нужно ввести в терминале команду
Чтобы остановить авто-кликер раньше, чем вписано в файле, нужно просто открыть окно терминала, через которое работает авто-кликер, и нажать сочетание клавиш Сtrl+C.
Это далеко не все возможности программы xdotool, но для создания простой кликалки в нужное место хватит и этих знаний. Подробнее можно прочитать на
Желаю накликать побольше печенек, надеюсь, чем-то смог помочь.
Источник
как сделать имитацию ввода с клавиатуры в Linux? Готовые программы не интересуют
например, я запустил скрипт, и в bash отправился символ, или даже целая команда
Если в речь идет об иксах, то расширение XTEST и еще вариант XSendEvent, который, однако, не со всеми программами может заработать, но зато сообщения можно посылать конкретному окну (в понимании X11, а не оконного менеджера). Для того, чтобы понять, как оно реализуется, смотри в код xdotool.
kdeconnect использует libfakekey, например.
. которая, к слову, использует все тот же XTEST.
не, обычная Ubuntu , просто какой нибудь скрипт бы изучить на c++ например
наподобие SendKeys в Windows если есть что-то)
Чтобы изучить скрипт на С++, нужно знать хотя бы С++.
Чем готовые программы не подходят? Они ведь тоже часто написаны на С/С++.
мне просто нужен кусок кода как это сделать) далее я хочу разобрать его)
нет, тебе это не нужно. учат от примитивов к абстракциям, а не наоборот, хотя тебе пофиг.
например, я запустил скрипт, и в bash отправился символ, или даже целая команда
uinput. работает в X11, Wayland, vty и далее везде.
емаксом
“eev is a library that adds support for e-scripts to Emacs”
e-scripts — код на elisp, который выполняется по нажатию одной кнопки (как гиперссылки, только на elisp)
почти как коммандеры в Обероне Blackbox Component Pascal. только емакс.
ну а потом запускаешь либо через eshell из емакса, либо через векторный гипертекстовый интерфейс, либо emacs в batch режиме со скриптом.
Re: емаксом
в старой версии eepitch у того же автора была утилита ee, про каналы, которая получает через канал текст и отправляет его в stdin другого процесса
он так интерпретаторы python, lua запускал
вообще это похоже на plan9 с plumbing и редактором acme
uinput. работает в X11, Wayland, vty и далее везде.
Источник
Удаленное управление компьютером по сети: Передача событий клавиатуры (Linux/X11)
Логика воспроизведения событий клавиатуры на Linux-системах в целом не сильно отличается от того, что мы уже реализовали под Windows. Но есть и отличия, о которых мы поговорим по мере необходимости.
Начнем с карты преобразования кодов клавиш из Qt::Key в специфичные системные коды X11. Займемся классом KeyMapper , добавив файл keymapper_x11.cpp (сокращенная версия):
Отличие этой от Windows-версии заключается в том, что в таблице Qt-кодам клавиш в соответствие ставится не прямой X11-код клавиши, а ее символьный вариант. Нам для заполнения таблицы достаточно специальных клавиш ( Delete , Enter и т.д.), букв латинского алфавита A-Z и цифр 0-9 , для которых в X11/keysymdef.h предусмотрены значения символьных кодов.
Для преобразования символьного кода клавиши в абсолютный используется функция XKeysymToKeycode() . Под абсолютным кодом клавиши имеется в виду код, однозначно присвоенный этой клавише, который не зависит от контекста (раскладки, клавиш-модификаторов и т.д.).
Обратите внимание, что для XKeysymToKeycode() в качестве одного из параметров требуется указатель на текущий дисплей. Его мы получаем с помощью функции XOpenDisplay() .
Переходим к непосредственному воспроизведению действия нажатия/отпускания клавиши. Функция onKeyAction() в файле remotecontrolserver.cpp :
В простейшем случае код клавиши находится в таблице из keyMapper . Этот код мы передаем функции XTestFakeKeyEvent() по аналогии с тем, как делали ранее при воспроизведении событий мыши (функция XTestFakeButtonEvent() ).
Чуть сложнее дела обстоят в ситуации, когда для Qt-кода ничего подходящего найти не удалось. В силу вступает «план Б»: используем текст text , который был получен на клиенте в результате нажатия клавиши.
Основная особенность заключается в том, что мы явно контролируем то, нажат ли Shift . Это связано с тем, что в строке text уже может быть заглавная буква или специальный символ (например, для Shift + цифра). В результате, если явно не «отжимать» клавишу Shift , мы воспроизведем совсем не то, что хотели. Достигается это повторным вызовом функции onKeyAction() :
Сама имитация нажатия сводится к регистрации дополнительного кода клавиши в таблице символьных кодов клавиш на основании первого Unicode-символа строки text :
Функция XStringToKeysym() принимает строку char* в формате UXXXX , где последнее — код печатного символа в таблице Unicode (например, U0411 для Б ), а возвращает числовое значение символьного кода клавиши.
Вся дальнейшая магия основана на использовании функций XGetKeyboardMapping() и XChangeKeyboardMapping() . После представленных манипуляций вызов XKeysymToKeycode() возвращает код клавиши, который можно воспроизводить с помощью знакомой нам функции XTestFakeKeyEvent() .
Выводы
Как и для Windows-версии, реализация под Linux не лишена недостатков. Они выражаются практически в том же самом: возможны «залипания» клавиш, могут некорректно отрабатывать клавиши-модификаторы, проблемы с раскладками. Также наблюдаются возможные проблемы при быстрой печати символами Unicode. Это связано со смешиванием событий нажатия/отпускания клавиш и особенностями X11 API.
Однако вывод остается прежним: пользоваться таким приложением уже можно. Все дальнейшие улучшения в большей степени заключаются в исправлении ошибок и доработке/оптимизации алгоритмов, а не в добавлении новых функций. Таким образом, хоть мы и оставили множество допущений, на этом работа над проектом окончена.
Реклама
Исходники
Сборка проекта проверялась под Linux и Windows с Qt 4.8.4 и компиляторами gcc (x64) и msvc.2010 (32-bit) соответственно.
Источник