Перечислите элементы управления VCL во внешнем приложении. - PullRequest
3 голосов
/ 25 октября 2009

возможно через API-интерфейсы Windows для перечисления и итерации элементов управления VCL в форме (TForm), принадлежащей внешнему приложению Win32, написанному на C ++ Builder или Delphi.

Bye.

Ответы [ 3 ]

7 голосов
/ 25 октября 2009

Нет. Прежде всего, учтите, что Windows API не знает, что такое «VCL». Он не знает "TButton" или "TStringGrid" и, конечно, не знает "TImage" или "TLabel", которые даже не имеют оконных дескрипторов.

Вы можете использовать EnumChildWindows, чтобы получить дескрипторы оконных элементов управления. Вы можете посмотреть на имена их классов , чтобы определить, что они происходят от "TButton" или "TStringGrid", но даже тогда у вас не будет доступа к объектам, связанным с объектами. У вас не будет ссылки на объект, и вы не сможете прочитать какие-либо свойства или вызвать какие-либо методы.

TestComplete из Automated QA предлагает доступ к формам и классам программы из внешней программы, что похоже на то, что вы пытаетесь сделать. Он работает, имея модуль, который вы включаете в программу Delphi, и этот модуль, по сути, обеспечивает заднюю дверь для программы TestComplete, которую можно использовать для запроса внутренних компонентов программы. Это требует сотрудничества с разработчиком приложения; Вы не можете использовать TestComplete для произвольной программы.

0 голосов
/ 26 октября 2009

Вплоть до Delphi 2006 вы могли использовать для этого vcltest3.dll . Но теперь вы должны идти по пути, который предлагает Роб Кеннеди.

0 голосов
/ 26 октября 2009

Вы можете посмотреть на DFM, которые хранятся в виде ресурсов в исполняемом файле.

Андерс Олссон (Anders Ohlsson) создал приложение VCL Scanner , которое делает это недавно. исходный код также доступен.

...