Какую библиотеку Python лучше всего использовать для автоматизации приложений на Windows?

Здравствуйте! Как написать скрипт для считывания текста из label поля в GUI приложении под Windows, вставки этого текста в input поле того же приложения и имитации нажатия клавиш, чтобы скрипт продолжал работать даже при свернутом приложении?
  • 21 января 2024 г. 14:48
Ответы на вопрос 3
Для автоматизации GUI приложений на Windows вы можете использовать несколько библиотек Python. Вот некоторые из них:

1. **PyAutoGUI**:
   PyAutoGUI позволяет вашей программе управлять мышью и клавиатурой для автоматизации взаимодействия с GUI. Однако PyAutoGUI работает с координатами и изображениями на экране, а не с элементами управления GUI напрямую. Он не позволяет работать со свернутыми приложениями.

   ```python
   import pyautogui

   # Будьте осторожны с pyautogui, оно перемещает вашу мышь!
   pyautogui.click(100, 100)  # переместить мышь и кликнуть
   pyautogui.typewrite('Hello world!', interval=0.25)  # писать текст
   ```

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

   ```python
   from pywinauto.application import Application

   app = Application(backend="uia").start('notepad.exe')

   # Найдите текстовое поле и введите текст
   app.UntitledNotepad.Edit.type_keys("Hello, world!", with_spaces=True)
   ```

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

3. **AutoIt**:
   AutoIt - это отдельный скриптовый язык для автоматизации Windows, но его также можно вызывать из Python с помощью библиотеки `PyAutoIt`. AutoIt имеет функции для работы с окнами, текстовыми полями, кнопками и другими элементами управления, и он может взаимодействовать с некоторыми свернутыми приложениями.

   ```python
   import autoit

   autoit.run("notepad.exe")
   autoit.win_wait_active("[CLASS:Notepad]", 3)
   autoit.control_send("[CLASS:Notepad]", "Edit1", "hello world{!}")
   ```

Для конкретной задачи считывания текста из label и вставки его в input поле, вы могли бы использовать Pywinauto. Вот пример того, как это можно сделать:

```python
from pywinauto.application import Application

# Подключаемся к уже запущенному приложению; используйте app.start('путь_к_приложению.exe') для запуска нового приложения
app = Application(backend='uia').connect(title='Название окна приложения')

# Получаем окно приложения
dlg = app.window(title='Название окна приложения')

# Считываем текст из label
label = dlg.child_window(auto_id='идентификатор_label', control_type='Text')
text_to_type = label.window_text()

# Вставляем текст в текстовое поле (input field)
input_field = dlg.child_window(auto_id='идентификатор_текстового_поля', control_type='Edit')
input_field.set_text(text_to_type)

# Имитация нажатия клавиш
input_field.type_keys("{ENTER}")  # имитация нажатия Enter
```

Обратите внимание на то, что для работы с данным скриптом приложение не должно быть свернуто, так как многие действия зависят от элементов управления, доступных только когда прилож
Тут подходит AutoIt - https://www.autoitscript.com/site/ 
Но это не питон, там свой язык скриптов
PyWinAuto вроде умеет работать в фоновом окне.
Похожие вопросы