2010-09-12 3 views
1

Я пытаюсь автоматизировать скрытое приложение .NET с другим .NET-приложением (написанным на C#), используя самый простой способ. Это НЕ для целей тестирования, это способ удовлетворить отсутствие сценариев для этого приложения.автоматизация приложений .NET

Я уже пробовал белый рамки, но есть одна серьезная проблема с этим: как он работает. Он медленный, и он не работает с скрытыми окнами и элементами управления (например, winAPI). Более того, когда «щелчок» белым перемещает мышь, она приносит целевое окно на передний план и так далее.

Я также думал об использовании оболочки user32.dll, потому что способ обращения с ней - это то, что мне нужно, но у меня красный, он не работает с .NET-приложениями. Это также будет проблемой, связанной с этим, потому что мое целевое приложение получило 5 кнопок с надписью «...», и было бы очень сложно найти 2 из них, которые мне нужны. Я также хотел бы использовать элементы управления .NET id (имя, которое разработчик дал своим элементам управления при разработке графического интерфейса).

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

+0

Ссылка: http://msdn.microsoft.com/en-us/magazine/cc163617.aspx –

ответ

2

Вы можете добавить ссылку на exe из своего проекта, а затем создать AppDomain для запуска основного метода. Оттуда должно быть возможно поставить очередь делегатов в цикл основного потока. С небольшим отражением вы можете заставить этих делегатов вызывать события click и whatnot напрямую.

Я никогда не пытался использовать этот подход, но он должен работать.

+0

Это звучит замечательно, но мое приложение после переноса? Кроме того, я не понимаю эту часть: «для очереди делегатов в цикл основного потока» – SinistraD

+0

Должна быть возможность помещать делегатов в основной поток, вызывая один из его методов «Control.Invoke». Я не уверен, что вы подразумеваете под «портативным»; если вы имеете в виду «не требует установки», ваше приложение будет работать, если контролируемое приложение не требует установки. Если вы имеете в виду «работать с разными и неожиданными версиями контролируемого приложения», тогда ответ будет отрицательным (но автоматизация пользовательского интерфейса будет иметь одинаковую проблему). –

1

Вы должны попробовать идею Стивенса вместо написания скрытого приложения. Приложение .NET Windows Forms (EXE) по-прежнему является сборкой .NET, и это означает, что вы можете использовать его так же, как DLL, просто добавьте ссылку и используйте публичные классы.

Если вы все еще хотите попробовать некоторые сценарии, посмотрите на API Microsoft UI Automation и пространство имен System.Windows.Automation.

Хорошая статья здесь: http://msdn.microsoft.com/en-us/magazine/cc163465.aspx

MSDN Doc: http://msdn.microsoft.com/en-us/library/system.windows.automation.aspx

Смежные вопросы