Как имитировать нажатие клавиши на клавиатуре

Обновлено: 28.06.2024

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

Отправлять смоделированные нажатия клавиш в окно графического интерфейса или терминал.

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

Содержание

Автогорячая клавиша [ изменить ]

Цель может быть создана извне.

AutoIt [ изменить ]

Код предполагает, что вы работаете с окном Windows. Run() может использовать любую программу, а WinWaitActive() требует название программы, которое будет при ее открытии.

Он принимает пользовательский ввод в переменной с помощью "поля ввода" и отображает его в "окне сообщения"

ОСНОВНЫЕ [изменить]

Applesoft BASIC [ изменить ]

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

Commodore BASIC [править]

Большая часть логики здесь предназначена для определения того, на какой модели Commodore запускается программа, чтобы использовать правильные адреса для буфера ввода с клавиатуры.

C [ изменить ]

Clojure [править]

Перейти [ изменить ]

Также должно работать в Windows 10, хотя я не проверял.

Программа запускает список каталогов, отправляя на терминал клавиши 'd', 'i', 'r', 'enter'.

Примечание. Возможно, вам придется сначала выполнить: 'sudo chmod +0666 /dev/uinput', если вы работаете в Linux.

ГИСС [ изменить ]

Java [править]

Нажатие клавиш при выполнении этой функции будет направлено на любое приложение, находящееся в фокусе в данный момент. Для определенных символов могут потребоваться особые случаи, но большинство значений VK в KeyEvent сопоставляются со значениями символов ASCII.

Котлин [ изменить ]

LabVIEW [править]

Ним [ изменить ]

В этом примере реализованы ограниченные возможности имитации ввода/клавиатуры в Windows с использованием только стандартной библиотеки. Для лучшей поддержки Windows мы можем использовать Winim и xdo для Linux. Текущий пример имитирует ввод с клавиатуры Hello world в текущем окне.

Скомпилируйте и запустите его (при условии, что у нас есть компилятор GNU C):

OCaml [ изменить ]

В этом примере используется Xlib для создания окна, затем, когда пользователь щелкает в этом окне, отправляется событие XKeyPressedEvent с функцией xSendEvent .

Оз [ изменить ]

Набор инструментов графического интерфейса Oz по умолчанию основан на Tk. Таким образом, мы можем сделать то же самое, что и в Tcl:

Это работает только с внутренними окнами.

Perl [править]

Perl в Linux может делать это для псевдотерминалов (ptys) и терминалов (ttys) с помощью IOCTL TIOCSTI. То же самое можно сделать с C или любым другим языком, который может использовать IOCTL либо изначально, либо через FFI, например JNI или JNA.

Цель может быть создана извне, но процесс должен иметь возможность открывать tty/pty для записи.

Perl для X11 может сделать это с помощью функции SendKeys из X11::GUITest

Perl в Windows может сделать это с помощью функции SendKeys из Win32::GUITest

Цель может быть создана извне.

Исправить [ изменить ]

PicoLisp [править]

PicoLisp поставляется со специальным графическим интерфейсом браузера. Библиотека, основанная на веб-скрапинге (в «lib/scrape.l»), может использоваться для управления этим графическим интерфейсом под управлением программы. Он позволяет читать страницы GUI, нажимать на HTML-ссылки, вводить текст в формы и нажимать кнопки отправки. Таким образом, одно приложение может управлять другим приложением.

Задокументированное демонстрационное приложение, которое также доступно в Интернете по адресу app.7fach.de, используется в следующем примере. Ввод с клавиатуры имитируется с помощью функции «ввод» для заполнения полей имени и пароля формы входа.

PowerShell [ изменить ]

Необходимо использовать CmdLet Start-Sleep, поскольку ни одно приложение не загружается мгновенно. Параметр -Milliseconds следует корректировать соответствующим образом для каждого приложения.

Windows Forms предоставляет несколько вариантов программного моделирования ввода с клавиатуры. В этой статье представлен обзор этих параметров.

Использовать ключи отправки

Windows Forms предоставляет класс System.Windows.Forms.SendKeys для отправки нажатий клавиш в активное приложение. Существует два метода отправки нажатий клавиш приложению: SendKeys.Send и SendKeys.SendWait. Разница между этими двумя методами заключается в том, что SendWait блокирует текущий поток при отправке нажатия клавиши, ожидая ответа, а Send — нет. Дополнительные сведения о SendWait см. в разделе Отправка нажатия клавиши в другое приложение.

Если ваше приложение предназначено для международного использования с различными клавиатурами, использование SendKeys.Send может привести к непредсказуемым результатам, и его следует избегать.

За кулисами SendKeys использует более старую реализацию Windows для отправки входных данных, что может привести к сбою в современной Windows, где ожидается, что приложение работает без прав администратора.Если старая реализация дает сбой, код автоматически пытается использовать более новую реализацию Windows для отправки входных данных. Кроме того, когда класс SendKeys использует новую реализацию, метод SendWait больше не блокирует текущий поток при отправке нажатий клавиш в другое приложение.

Если ваше приложение полагается на согласованное поведение независимо от операционной системы, вы можете заставить класс SendKeys использовать новую реализацию, добавив следующий параметр приложения в файл app.config.

Чтобы заставить класс SendKeys использовать только предыдущую реализацию, используйте вместо этого значение "JournalHook".

Чтобы отправить нажатие клавиши тому же приложению

Вызовите метод SendKeys.Send или SendKeys.SendWait класса SendKeys. Указанные нажатия клавиш будут получены активным элементом управления приложения.

В следующем примере кода функция Send используется для имитации одновременного нажатия клавиш ALT и DOWN. Эти нажатия клавиш заставляют элемент управления ComboBox отображать раскрывающийся список. В этом примере предполагается форма с кнопкой и полем со списком.

Чтобы отправить нажатие клавиши другому приложению

Методы SendKeys.Send и SendKeys.SendWait отправляют нажатия клавиш в активное приложение, которым обычно является приложение, из которого вы отправляете нажатия клавиш. Чтобы отправлять нажатия клавиш в другое приложение, его сначала нужно активировать. Поскольку нет управляемого метода для активации другого приложения, вы должны использовать собственные методы Windows, чтобы сфокусировать другое приложение. В следующем примере кода вызов платформы используется для вызова методов FindWindow и SetForegroundWindow для активации окна приложения "Калькулятор", а затем вызывается Send для выполнения ряда вычислений в приложении "Калькулятор".

В следующем примере кода функция «Отправить» используется для имитации нажатия клавиш в приложении «Калькулятор» Windows 10. Сначала он ищет окно приложения с заголовком «Калькулятор», а затем активирует его. После активации нажатия клавиш отправляются для вычисления 10 плюс 10.

[DllImport("USER32.DLL", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("USER32.DLL")] public static extern bool SetForegroundWindow(IntPtr hWnd); private void button1_Click (отправитель объекта, EventArgs e) < IntPtr calcWindow = FindWindow (null, «Калькулятор»); if (SetForegroundWindow(calcWindow)) SendKeys.Send("1010 lang-vb"> Общедоступная общая функция FindWindow(lpClassName As String, lpWindowName As String) As IntPtr : End Function Общедоступная общая функция SetForegroundWindow(hWnd As IntPtr) As Boolean : End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Dim hCalcWindow As IntPtr = FindWindow(Nothing, "Calculator") If SetForegroundWindow(hCalcWindow) Then SendKeys.Send("1010 use-oneventname-methods">Использовать методы OnEventName

Самый простой способ имитировать события клавиатуры — вызвать метод объекта, вызывающий событие. У большинства событий есть соответствующий метод, который их вызывает, названный по образцу On, за которым следует EventName, например, OnKeyPress. Этот параметр возможен только в настраиваемых элементах управления или формах, поскольку эти методы защищены и недоступны вне контекста элемента управления или формы.

Эти защищенные методы доступны для имитации событий клавиатуры.

  • Онкэйдаун
  • При нажатии клавиши
  • Онкэйап

Иногда при тестировании нужно отправить последовательность нажатых кнопок (нажатие клавиши) на указанный объект - элемент управления или окно.

Вы можете имитировать ввод с клавиатуры из своих тестов, используя следующие методы:

IControl.Keys — отправляет нажатия клавиш элементу управления, к которому интерфейс предоставляет доступ.

IDesktop.Keys — отправляет нажатия клавиш окну или элементу управления, который в данный момент находится в фокусе.

Control.keys — отправляет нажатия клавиш элементу управления, к которому объект предоставляет доступ.

Desktop.keys — отправляет нажатия клавиш окну или элементу управления, который в данный момент находится в фокусе.

У методов есть один параметр — строка ключей для имитации. Строка может включать буквенно-цифровые символы, а также специальные коды клавиш (Ctrl, Alt, F1, Tab и другие).

Однако метод Keys имитирует фактические нажатия клавиш. Этот метод также гарантирует, что в тестируемом приложении инициируются соответствующие события клавиатуры и выполняются соответствующие обработчики событий (если таковые имеются).

Ключевые константы

Метод Keys принимает параметр, указывающий имитируемое нажатие клавиши.

Для имитации нажатия системных клавиш, таких как Ctrl , Alt , Shift , F1 , Tab и т. д., используйте следующие константы:

Коды сдвига (^, ~ и !) Параметр не нажимайте Ctrl , Alt или Shift . Вместо этого будет нажата следующая клавиша в строке при указанных условиях сдвига. То есть коды сдвига влияют на первую после них клавишу без сдвига. Например, следующий код нажимает Ctrl+ESC (этот ярлык показывает меню «Пуск»):

импорт com.smartbear.testleft.*;

Драйвер driver = new LocalDriver();
driver.getDesktop().keys("^[Esc]");

Чтобы отделить нажатия клавиш Shift от комбинированных нажатий клавиш, как показано выше, вызовите метод Keys отдельно.

Для имитации одновременного нажатия нескольких клавиш используйте константу [Hold]. Например, [Удерживать][Win]e запустит проводник Windows.

Чтобы деактивировать [Hold], используйте константы [Release] и [ReleaseLast]. [ReleaseLast] дает команду TestLeft имитировать отпускание последней нажатой клавиши. Например, строка [Hold]^f[ReleaseLast]U соответствует следующей последовательности нажатий клавиш: нажатие Ctrl , нажатие f , отпускание f , нажатие U , отпускание U и Ctrl .

[Release] имитирует отпускание всех нажатых клавиш. Например, строка [Hold]^fU[Release] (или [Hold]^fU ) дает команду TestLeft имитировать нажатие Ctrl , затем нажатие f , затем нажатие U и отпускание всех этих клавиш.

Символы на родном языке

Методы Key распознают символы родного языка и автоматически переключают раскладку клавиатуры для ввода этих символов.

Для имитации нажатия клавиш на родном языке можно также использовать константы [Xnn] или [Dnn] в строке, передаваемой методу Keys. nn указывает код виртуальной клавиши, которая будет «нажата». Например, [X221]u[X221]e будет «набирать» символы u и e с циркумфлексным ударением.

Разница между X и D заключается в том, что D имитирует нажатие символов мертвой клавиши, а X имитирует нажатие любой клавиши с помощью ее кода виртуальной клавиши. Когда вы указываете тег D, TestLeft проверяет, поддерживается ли указанный символ мертвой клавиши языками, установленными в операционной системе. Если проверка прошла успешно, TestLeft активирует соответствующую раскладку клавиатуры и имитирует нажатие указанной клавиши.

Еще один способ имитировать ввод символов на родном языке или специальных символов — использовать константы [Altnn]. Эта константа дает команду TestLeft имитировать нажатие клавиши Alt и ввод цифровых клавиш на цифровой клавиатуре (то есть ALT + character_code на цифровой клавиатуре, стандартный способ ввода символов по их коду символов ANSI). .

Чтобы «вводить» символы родного языка в расширенные элементы управления, вы можете использовать сочетания клавиш, поддерживаемые этими элементами управления (это работает только с английской, французской, немецкой, итальянской и испанской клавиатурами):

Ярлык Описание Пример Результат Ctrl+' (апостроф) + нужный символ Акцент острый [Hold]^'a< /td>
Ctrl+` (гравировка) + нужный символ Ударение гравировка [Удерживать]^`a
< td>Ctrl+~ (тильда) + нужный символ Тильда с ударением [Удерживать]^~~a
Ctrl+; (точка с запятой) + нужный символ Умлаут с ударением [Hold]^;a
Ctrl+Shift+6 + нужный символ< /td> Accent циркумфлекс [Hold]^!6a
Ctrl+, (запятая) + c или C Седиль с ударением [Удерживать]^,c

Пример

Следующий пример кода имитирует нажатие комбинации клавиш Ctrl + N в приложении "Блокнот" (блокнот должен быть запущен):

Отправляет нажатия клавиш в указанное вами окно или окно, которое в данный момент находится в фокусе. После того, как вы открыли приложение программно, вы можете использовать это действие для доступа к командам меню с помощью сочетаний клавиш или горячих клавиш, таких как ALT + F, чтобы открыть меню «Файл». Отправить нажатия клавиш — одно из самых мощных действий для управления приложениями.

GeneralSendKeys1
GeneralSendKeys2

Определяет окно для отправки нажатий клавиш. Есть два варианта:

• Текущее окно — нажатия клавиш отправляются в текущее окно.

• Указанное окно — указанное окно будет сфокусировано, и нажатия клавиш будут отправляться в него.

Часть заголовка окна

Введите заголовок или часть заголовка окна, в которое будут отправляться нажатия клавиш. Этот параметр доступен, только если выбран параметр «Указанное окно».

Установите этот флажок, если хотите запретить пользователю переключать окна во время выполнения действия.

Определяет нажатия клавиш, которые действие отправляет окну. Для буквенно-цифровых символов введите эти клавиши на клавиатуре. Для специальных клавиш, таких как Esc, F11, клавиша со стрелкой влево и Ctrl+Alt+A, нажмите кнопку "Вставить клавишу".

Нажмите эту кнопку, чтобы вставить специальные клавиши, например Esc, F11, клавишу со стрелкой влево и Ctrl+Alt+A. Вы также можете вставить паузу между нажатиями клавиш, чтобы дать время для программных операций, таких как открытие файла.

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

• Отправить как простой текст – в этом режиме производится имитация простого набора текста. Текст отправляется как есть, без использования комбинаций. Обратите внимание, что отправка нажатий клавиш зависит от текущего языкового стандарта клавиатуры.

Принудительное отпускание клавиш Shift

Включите этот параметр, если хотите сделать принудительное отпускание Shift-клавиш. Вы можете отключить этот параметр, если хотите отправлять нажатия клавиш, когда некоторые из клавиш Shift удерживаются нажатыми (см. Состояние клавиш Shift).

Вставить паузу между нажатиями клавиш

Вставить паузы между нажатиями отдельных клавиш в миллисекундах. Это особенно важно для режима «Эмуляция нажатия клавиш». Паузы необходимы, чтобы дать приложению некоторое время для реакции на нажатие клавиш или комбинации клавиш. По умолчанию установлено 20 миллисекунд. Как правило, этого достаточно для большинства случаев.

Позволяет добавить переменную к выбранному действию или инициирующему событию. Вы должны поместить курсор в поле редактирования в диалоговом окне настроек действия или события, а затем нажать кнопку.

Стандартные ключи для окон GDI

При работе с эмулируемыми нажатиями клавиш мы рекомендуем использовать стандартные комбинации клавиш для управления диалоговыми окнами. Эти комбинации работают в большинстве диалоговых окон приложений Windows, и вам не придется использовать мышь.

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