2012-04-13 8 views
2

Я хотел бы получить информацию об элементах управления стороннего приложения, таких как список его свойств и их значений: что-то вроде информации RTTI, но для стороннего приложения Delphi.Как получить список свойств и значения элемента управления в стороннем приложении Delphi?

Я вижу, что это возможно. Например, TestComplete имеет окно ObjectSpy, которое может предоставить много полезной информации об элементе управления, включая информацию RTTI. Как это может быть сделано ?

enter image description here

Edit: Чтобы объяснить, почему я расследую этот вопрос ... Я зарегистрированный пользователь TestComplete/TestExecute и я, как ... большинство из них. Я могу справиться с незначительными вещами, но одной из основных проблем для меня является их license verification system, из-за чего я должен иметь компьютер физический (а не виртуальную машину) всегда только ради запуска сервера лицензий, чтобы TestExecute мог работать на ночь. Поскольку у меня есть базовые требования к тестированию (сравните скриншоты и проверьте основные свойства компонента Delphi), я подумал, как трудно было бы сделать мое собственное очень простое приложение «TestExecute-like».

+0

@RRUZ Нет, вам не нужно добавлять какие-либо устройства в свою программу Delphi, чтобы получить эту информацию. Я только что попробовал с моим, и он прекрасно сообщает свойства. – jonjbar

+0

Вы хотите сказать, что хотите проверить запущенное приложение, написанное на Delphi, с помощью специальной утилиты (той, которую вы собираетесь писать)? Я не уверен, чтобы понять ваше требование. – menjaraz

+1

Я думаю, что он хочет написать свой собственный эквивалент TestComplete, по крайней мере, насколько это показано на скриншоте выше, инспектор свойств, проверяющий запущенную видимую форму для приложения Delphi. Возможно, с отладочной информацией, включенной в исполняемый файл, но без доступа к исходному коду. –

ответ

2

Когда мы хотим взять другое приложение, которое скомпилировано с отладочной информацией и получить материал из него во время выполнения, мы имеем дело с проблемой «как написать собственное собственное отладчик/профайлер/автоматическое тестовое ядро ».

TestComplete и другие программы AutomatedQA содержат ядро ​​отладчика и профайлера, которое может запускать, запускать и удаленно управлять приложениями и анализировать их информацию об отладке в нескольких форматах, включая информацию TurboDebugger TD32, прикрепленную к этим исполняемым файлам. Их ядро ​​профилирования также может видеть каждый объект по мере его создания и может выполнять итерацию информации об отладке, подобной RTTI, чтобы определить, что созданный объект относится к определенному типу класса, а затем посмотреть, какие свойства существуют в этом объекте.

Теперь TestComplete добавляет поверх уровня AQTime, возможность интроспекции оконных ручек и интуицию из оконных дескрипторов, имена классов Delphi, которые находятся за ним. Тем не менее, вам гораздо легче (или мне) написать программу, которая может сказать вам, что мышь находится над дескриптором окна, который принадлежит TPanel, чем знать, какая версия Delphi создала этот конкретный исполняемый файл, какую версию TPanel, то, и какие свойства он будет содержать, и прочитать эти значения из текущей программы, что требует, чтобы вы реализовали свой собственный «механизм отладчика». Я не знаю о каких-либо приложениях с открытым исходным кодом, которые вы могли бы даже использовать, чтобы начать писать собственный отладчик, и вы, конечно же, не можете использовать те, которые находятся внутри AQTime/TestComplete, или тот, что внутри самого Delphi, в ваших собственных приложениях ,

Я не мог написать вам образец программы для этого, но даже если бы мог, для этого потребовалось бы много поддержки сторонних библиотек. Чтобы увидеть классы окон для дескриптора окна, над которыми находится ваша мышь, посмотрите, как реализовать что-то вроде утилиты MS Spy ++.

An easy case is if your mouse is mousing over a window inside your own application. Для этого см. Ссылку about.com, которая просто использует RTTI.

+0

@Warren P: Насколько я могу судить, TestComplete может получать информацию о базовых компонентах из приложений, которые не содержат отладочную информацию. Ваш пример с TPanel - это именно то, чего я хотел бы достичь.Вы имеете в виду, что просто получение «имени» TPanel было бы очень сложной задачей, связанной с созданием настраиваемого механизма отладчика? – jonjbar

+0

@menjaraz Это не полезно, поскольку выбор имени класса для элемента управления легко, и мне нужны и другие свойства. Также это приложение не поставляется с исходным кодом. – jonjbar

+0

John: Если есть сомнения, прочитайте документы! TestComplete 8 docs говорят, что вам нужна информация об отладке, чтобы получить свойства объектов delphi из testcomplete: http://support.smartbear.com/viewarticle/11168/?FullScreen=0 –

3

Чтобы идти дальше, я предлагаю вам эти соответствующие ресурсы, находящихся здесь на SO


Я настоятельно рекомендую вам портировать на Delphi это C++ проект под названием Get Process Info with NtQueryInformationProcess: А практический опыт по использованию ReadProcessMemory для доступа к CommandLine используется для запуска другого процесса.


Последнее редактирование:

+0

+1 для отличных практических источников. –

+0

Эти ресурсы очень полезны, и я буду изучать их. Большое спасибо menjaraz. – jonjbar

+0

@John Riche: Рад помочь вам. Меня интересует проект. Tenez moi au courant svp :-). – menjaraz