Всё так, поддерживаю. :) Только службы (они же сервисы) в Windows не имеют доступа к GUI, тем более в той же самой сессии. Теоретически там есть флажок такой, но это, насколько я помню, не работает для автоматизации текущей сессии.
Какой backend используете при создании Application() объекта? Может Application(backend="uia") попробовать? Опять же какой output у метода .dump_tree()? Именно куски кода и детали в текстовом виде делают любой вопрос легче. Гадать на кофейной гуще не приходится.
Если используется распознавание картинок, значит с получением текста всё грустно, видимо. Кроме Win32 API pywinauto ещё умеет UI Automation API (это которое Inspect.exe использует). Если оба API не годятся, то да: распознавание картинок - последний бастион автоматизатора.
Владимир, если пользоваться VNC или RDP в детач режиме, то можно юзать любые методы. Вот недавно написал Remote Execution Guide со всеми известными мне трюками. Если без них, то возможно send_keystrokes('{ESC}') сработает, хотя 100% гарантии нет, надо проверять на конкретном приложении. Вместо click_input() следует использовать либо .click(), либо другие смысловые методы по ситуации.
Программно через MS UI Automation можно. Из open source библиотек на Python есть pywinauto, на C# есть Winium и TestStack.White. Но у них, разумеется, нет рекордера скриптов (хотя для pywinauto пытаемся сделать как раз). Если ещё актуально, можно через пару месяцев потестить прототип.
Под линукс есть библиотека pyatspi2, если на питоне. На крайняк сишную libatspi.so грузить напрямую. На MacOS есть Atomac: https://github.com/pyatom/pyatom
Правда, есть прототип из разряда: GUI action handlers в Java свои, а в питоне - через JPype. Но это далеко не универсальный способ, ибо надо знать хотя бы имена функций в Java приложении.
Java контролы pywinauto скорее всего не увидит. Даже через MS UI Automation не все Java GUI приложения можно автоматизировать. А исследования по Python-Java взаимодействию - пока на уровне "посёрфили тулы, 80% из них не работает": https://github.com/pywinauto/pywinauto/wiki/Automa...
Спасибо! Очень пригодилось для библиотеки pywinauto. Долго разбирался со включением модификатора Ctrl. Для Shift и Alt всё прекрасно работало и без SetKeyboardState() и PostMessage(). А вот Ctrl никак не давался.
TomashUA: спасибо за use case. Запишем как feature request. К сожалению, pyHook не обновлялся с 2010 года, поэтому бинарники под x64 нужно пересобирать (там есть C-шный модуль). Видимо, напишем hook модуль сами, на чистом питоне, через ctypes.
Для таких небольших задач несомненно нужно делать shortcuts. Если есть ещё подобные use cases, мы будем только рады. Пока с AutoIt по охвату функциональности нам сложно конкурировать, но в среднесрочном будущем хотелось бы.
Клоны с 2to3 fixer'ом есть. Есть x64 клоны с удалёнными ассертами. Есть даже клон и с тем, и с другим (в BrowserRefresh-sublime, но надо ещё суметь найти). Наша текущая версия на гитхабе (pywinauto.github.io) работает на обоих питонах (спасибо модулю six), все ассерты сохранены и сделаны условными под 32 и 64 бита.
TomashUA: думаю, такого примера в документации нет (доками детальнее займусь после релиза). Можете кинуть ссылку, как это делается на AutoIt? Взять через pywinauto активное окно и послать в него Ctrl+Alt+T - это элементарно. Вот для подписки на клавиатурное событие и обработки F2, возможно, понадобится ещё pyHook.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.