Как написать программу для нажатия кнопки

Python является одним из наиболее подходящих языков для автоматизации задач. Будь то повторяемый (этический) веб-скоб через некоторое время, запуск некоторых программ при запуске компьютера или автоматизацию отправки повседневных электронных писем, Python имеет много модулей, которые облегчают вашу жизнь.

Одним из них является модуль под названием keyboard, который полностью контролирует вашу клавиатуру. С помощью данного модуля вы можете печатать что угодно, создавать горячие клавиши, сокращения, блокировать клавиатуру, ждать ввода и т. д.

В этом руководстве мы рассмотрим, как настроить и использовать модуль клавиатуры в Python.

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

Уроки Python / Модуль tkinter создание кнопки и вызов функции

Установка модуля клавиатуры

Версия Python, используемая в этом руководстве, равна 3.8. Однако модуль клавиатуры может работать как с Python 2.x, так и с Python 3.x.

Если вы используете Linnux, чтобы использовать эту библиотеку, вы должны установить ее от root. Если вы этого не сделаете, вы получите:

ImportError: You must be root to use this library on linux.

Кроме того, при запуске сценария вы должны запускать его с правами суперпользователя:

$ sudo pip3 install keyboard $ sudo python3 my_script.py

В Windows и macOS, поскольку привилегии работают совсем по-другому — вы можете установить его просто через pip и запустить сценарии:

$ pip install keyboard $ python my_script.py

Примечание: Для MacOS вам, возможно, придется разрешить терминалу или другим приложениям изменять состояние вашей машины, например, путем ввода текста. Также имейте в виду, что по состоянию на сентябрь 2021 года библиотека все еще находится в экспериментальном состоянии на MacOS.

Функция модуля клавиатуры

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

  • keyboard.write(message, [delay])- пишет сообщение с задержкой или без нее.
  • keyboard.wait(key) — блокирует программу до тех пор, пока не будет нажата клавиша. Ключ передается в виде строки («пробел», «esc» и т.д.)
  • keyboard.press(key)- нажимает клавишу и удерживается до вызова функции release(key)
  • keyboard.release(key)- выпускает ключ.
  • keyboard.send(key)- нажимает и отпускает клавишу.
  • keyboard.add_hotkey(hotkey, function)- создает hotkey, которая при нажатии выполняет function.
  • keyboard.record(key)- записывает активность клавиатуры до нажатия key.
  • keyboard.play(recorded_events, [speed_factor]) — воспроизводит события, записанные with keyboard.record(key) функция, с дополнительным speed_factor.
Читайте также:
Запуск программы невозможен так как отсутствует mfc100u dll

Тем не менее, мы рассмотрим все это. Вот быстрый пример:

Эмитируем зажим кнопки W с помощью AutoHotkey


>>> import keyboard >>> keyboard.write(«Hello») >>> Hello

Приветственное сообщение появляется на экране в терминале, как будто вы его написали. Вы можете очень легко автоматизировать команду и создать для нее псевдоним горячей клавиши. Вот (грубый) пример выхода из REPL Python, написания команды curl:

>>> import keyboard >>> keyboard.write(«exit()»); keyboard.send(«enter»); keyboard.write(«curl https://www.google.com»); keyboard.send(«enter»); >>> exit() curl https://www.google.com $ curl https://www.google.com

Функции write() и wait() клавиатуры

Команда write() записывает сообщение, как мы видели ранее, с необязательной задержкой при запуске. Если задержка не установлена, запись выполняется мгновенно. Это очень хорошо сочетается с функцией wait (), которая ожидает нажатия определенной клавиши.

Например, мы можем создать импровизированный макрос, привязанный, скажем, к 1, который отвечает на этот ввод новым сообщением. Обратите внимание, что вместо этого есть фактический способ создания горячих клавиш, который мы рассмотрим позже.

Как имитировать события клавиатуры (Windows Forms .NET)

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

Документация по классическим приложениям для .NET 7 и .NET 6 находится в стадии разработки.

Использование SendKeys

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 и ВНИЗ . Эти нажатия клавиш приводят к тому, что элемент управления ComboBox отображает свой раскрывающийся список. В этом примере предполагается наличие Form с Button и ComboBox.

private void button1_Click(object sender, EventArgs e) < comboBox1.Focus(); SendKeys.Send(«%+»); >
Private Sub Button1_Click(sender As Object, e As EventArgs) ComboBox1.Focus() SendKeys.Send(«%+») End Sub

Отправка нажатия клавиши в другое приложение

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

Чтобы отправить нажатия клавиш в другое приложение, необходимо сначала активировать его. Из-за отсутствия управляемого метода активации другого приложения необходимо использовать собственные методы Windows для установки фокуса на другие приложения. В примере кода ниже с помощью вызова неуправляемого кода вызываются методы FindWindow и SetForegroundWindow для активации окна приложения «Калькулятор», а затем вызывается метод Send для проведения ряда вычислений в этом приложении.

В следующем примере кода метод Send используется для имитации нажатия клавиш в приложении «Calculator» (Калькулятор) в Windows 10. Сначала он ищет окно приложения с заголовком Calculator , а затем активирует его. После активации окна отправляются нажатия клавиш для вычисления выражения «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(object sender, EventArgs e) < IntPtr calcWindow = FindWindow(null, «Calculator»); if (SetForegroundWindow(calcWindow)) SendKeys.Send(«1010=»); >
Public Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr : End Function Public Shared 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=») End If End Sub

Использование методов OnEventName

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

Читайте также:
Как установить видео обои без программ

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

  • OnKeyDown
  • OnKeyPress
  • OnKeyUp

Дополнительные сведения об этих событиях см. в разделе Использование событий клавиатуры (Windows Forms .NET).

См. также

  • Общие сведения об использовании клавиатуры (Windows Forms .NET)
  • Использование событий клавиатуры (Windows Forms .NET)
  • Использование событий мыши (Windows Forms .NET)
  • SendKeys
  • Keys
  • KeyDown
  • KeyPress

Источник: learn.microsoft.com

Пример обработки событий «Нажатие клавиш»

В компьютерных играх и не только часто используют нажатие одной или нескольких (комбинаций) клавиш.
Известно, что нажатия клавиш (далее — ключевые события) происходят в следующем порядке:
1) KeyDown
2) KeyPress
3) KeyUp
То есть, если Вы клавишу нажали, но не отпустили, событие KeyUp не наступает.
Заметим, что KeyPress-событие не вызывается несимвольными ключами, отличными от пробела и Backspace; однако, несимвольные ключи вызывают события KeyDown и KeyUp. Обязательно задайте свойство Form1.KePreview=true для получения реакции на клавишу — событие Control.KeyPress.

Используйте свойство KeyChar для выборки сочетаний клавиш во время выполнения, а также для использования или изменения подмножества распространенных нажатий клавиш.

Чтобы обрабатывать события клавиатуры только на уровне формы и не включать другие элементы управления для получения событий клавиатуры, задайте KeyPressEventArgs.Handled для свойства в KeyPress-методе обработки событий формы значение true.

Приведенные примеры методов обработки этих событий помогут Вам решить любые задачи:

using System.Windows.Forms; namespace PressAnyKey < public partial class Form1 : Form < public Form1() < InitializeComponent(); >// При нажатии клавиш ALt+F (F в любых раскладках и регистрах) private void Form1_KeyDown(object sender, KeyEventArgs e) < if (e.Alt e.KeyCode == Keys.F) label1.Text = «Alt + F: » + e.Alt.ToString() + » — » + e.KeyCode.ToString(); >// При нажатии клавиш Shift + Control + Z (Z в любых раскладках и регистрах) private void Form1_KeyUp(object sender, KeyEventArgs e) < if (e.Shift e.Control e.KeyCode == Keys.Z) label1.Text = «Shift + Control + Z — » + e.KeyCode.ToString(); >// Происходит при нажатии клавиши с буквой, пробела или клавиши BACKSPACE, если фокус находится в элементе управления. // e.KeyChar возвращает полный код нажатой клавиши, в примере а/А/ф/Ф private void Form1_KeyPress(object sender, KeyPressEventArgs e) < if ((e.KeyChar == ‘a’) | (e.KeyChar == ‘A’) | (e.KeyChar == ‘ф’) | (e.KeyChar == ‘Ф’)) label1.Text = «AaФф — » + e.KeyChar.ToString(); ; >> >

NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.

Источник: c-sharp.pro

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru