Почему щелчок правой кнопкой мыши, отправленный из pywinauto, не меняет состояние выделенной серым цветом кнопки подключения в информатике, но реальный щелчок кнопки мыши изменяет?

Я пытаюсь написать скрипт, используя pywinauto, чтобы открыть репозиторий в диспетчере рабочих процессов Informatica powercenter (v9.6.1)

После выполнения приведенных ниже строк я получаю контекстное меню с опцией подключения, как на скриншоте. Также обратите внимание, что кнопка «Подключиться» на панели инструментов остается неактивной. Если я использую реальную мышь и нажимаю на элемент дерева для репозитория, к которому я хочу подключиться, кнопка подключения становится зеленой и активной. Но не тогда, когда pywinauto отправляет правый клик.

from pywinauto.application import Application
from pywinauto.keyboard import SendKeys
import time

app = Application().Start(cmd_line=r'C:\PowerCenterClient\client\bin\pmwflmgr.exe')
informaticaworkflowmanager = app[u'Informatica::WorkflowManager']
informaticaworkflowmanager.Wait('ready')
time.sleep(2)
systreeview = informaticaworkflowmanager[u'TreeView']
tree_item = systreeview.GetItem([u'Repositories', u'REP'])
tree_item.Select()
tree_item.Click(button='right',double=True,where='icon')

введите здесь описание изображения

Я попытался использовать SendKeys для отправки «c», а затем {ENTER}, и он просто возвращается, ничего не делая. Кроме того, если я использую фактическую клавиатуру в контекстном меню правой кнопки мыши, созданном после выполнения вышеуказанных шагов pywinauto, он выбирает меню подключения, когда я нажимаю c , но ничего не делает, когда я нажимаю Enter. Я думаю, почему-то функция подключения не включена. Я понятия не имею, требуется ли какой-либо другой ввод для приложения, чтобы включить его. Я также пытался использовать параметр informaticaworkflowmanager.MenuItem(u'&Repository->&Connect...'), но безрезультатно - он говорит, что он отключен.

Любые указатели, которые помогут pywinauto открыть репозиторий, приветствуются!


person dbza    schedule 05.09.2017    source источник
comment
Сначала попробуйте запустить скрипт от имени администратора. Если не поможет, используйте метод click_input(). Он запускает реальный клик, как это делает пользователь. Метод click() отправляет WM_CLICK или BM_CLICK, которые, вероятно, не обрабатываются приложением в состоянии серой кнопки.   -  person Vasily Ryabov    schedule 05.09.2017
comment
@ВасилийРябов спасибо! click_input() сработал. Вы можете добавить ответ, если хотите. Также спасибо за то, что познакомили меня со всей автоматизацией графического интерфейса, в последние несколько дней я читал о подобных фреймворках (sikuli и т. д.), это похоже на открытие совершенно нового мира производительности. Я не могу поверить, как никто не говорит об этом чаще!   -  person dbza    schedule 06.09.2017
comment
@VasilyRyabov Теперь я застрял в другой проблеме, вероятно, для этого нужны права администратора. Как запустить Application().Start() от имени администратора?   -  person dbza    schedule 06.09.2017
comment
Если вы запускаете скрипт от имени администратора, он по умолчанию должен наследовать привилегии дочернего процесса. В методе start() нет специального флага, поскольку некоторые функции могут не работать, если у целевого процесса приложения более высокие привилегии. В любом случае повышение обычно требует подтверждения от пользователя, и это диалоговое окно подтверждения безопасности не может быть автоматизировано дизайном ОС.   -  person Vasily Ryabov    schedule 06.09.2017


Ответы (1)


Просто резюмируя комментарии...

  1. Сначала попробуйте запустить скрипт от имени администратора. Если не поможет, воспользуйтесь методом click_input(). Он запускает реальный клик, как это делает пользователь. Метод click() отправляет WM_CLICK или BM_CLICK, которые, вероятно, не обрабатываются приложением в состоянии серой кнопки.

  2. Если вы запускаете скрипт от имени администратора, он по умолчанию должен наследовать привилегии дочернего процесса. В методе start() нет специального флага, поскольку некоторые функции могут не работать, если у целевого процесса приложения более высокие привилегии. В любом случае повышение обычно требует подтверждения от пользователя, и этот диалог подтверждения безопасности не может быть автоматизирован дизайном ОС (даже click_input() с жестко закодированными координатами не будет работать, пока отображается этот диалог, я проверял это некоторое время назад).

person Vasily Ryabov    schedule 06.09.2017