Можно ли вызвать функцию в другом, но выполняемом в данный момент процессе? - PullRequest
0 голосов
/ 19 марта 2012

У меня есть друг, который работает в компании, которая предлагает довольно слабую поддержку своим разработчикам (набрав 1/12 на Joel Test ).

Их процесс сборки заблокировандовольно плотно, и в зависимости от размера проекта для развертывания может потребоваться более 40 (х2) кликов мыши.Поэтому я подумал: «Эй, почему бы не автоматизировать клики с помощью win32api?»(В частности, с использованием Python).У меня есть действительно хороший инструмент, который прекрасно работает, за исключением одной проблемы - у инструмента, который они используют, есть панель навигации, которая может быть или не быть открытой.

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

  • Присоединитесь к процессу через отладчик и каким-то образом выполните вызов функции.
  • Сделайте снимок экрана в расположении заголовка панели (который я получил через win32 API и, похоже, не меняетсянезависимо от того, скрыта ли панель или нет).

Есть ли более простой способ выяснить состояние этой панели?Разработчикам предоставляется учетная запись администратора на их компьютере в дополнение к их обычной учетной записи, поэтому я могу развлекать идеи, требующие доступа администратора, хотя я не думаю, что это необходимо?

ОБНОВЛЕНИЕ: Похоже, есть кнопка, которая может закрыть панель.В UIAVerify что-то отображается как «текст», «навигация», «btnClose».Он говорит, что его AutomationId btnClose, но это ControlType.Text

1 Ответ

0 голосов
/ 19 марта 2012

По какой технологии построена эта панель?Это стандартный GDI или WPF?Если его GDI, он должен иметь HWND.Вы должны быть в состоянии найти этот HWND либо по имени класса, либо по заголовку окна.Как только у вас есть HWND, вы можете получить его ширину.Если он построен с WPF, я понятия не имею, но Snoop делает такие вещи, поэтому я знаю, что это возможно.

...